P2392 kkksc03考前临时抱佛脚
题目链接:
这道题的题意容易引起歧义。
举一个 \(\rm Hack\) 数据。
2 1 100 2
答案应该为 \(100\) \((\)左脑算 \(100,\) 右脑算 \(2+1+2,\) 答案是 \(100)\)。
第一个科目
有一题,所以我们可以得到:
1、全左脑:耗时 \(5\)。
2、全右脑:耗时 \(5\)。
因此第一个科目的最小时间为 \(5\) 分钟。
第二个科目
有两题,所以我们可以得到:
1、全左脑:耗时 \(4+3=7\)。
2、左脑解题 \(1\),右脑解题 \(2\):耗时 \(\max(4,3)=4\)。
3、左脑解题 \(2\),右脑解题 \(1\):耗时 \(\max(3,4)=4\)。
4、全右脑:耗时 \(4+3=7\)。
因此第二个科目的最小时间为 \(4\) 分钟。
第三个科目
有一题,所以我们可以得到:
1、全左脑:耗时 \(6\)。
2、全右脑:耗时 \(6\)。
因此第三个科目的最小时间为 \(6\) 分钟。
第四个科目
有三题,所以我们可以得到:
1、全部左脑完成。这样耗时为 \(2+4+3=9\)。
2、左脑完成1、2题,右脑完成3题。这样耗时是 \(\max(2+4, 3)=6\)。
3、左脑完成1、3题,右脑完成2题。这样耗时是 \(\max(2+3, 4)=5\)。
4、左脑完成1题,右脑完成2、3题。这样耗时是 \(\max(2, 4+3)=7\)。
5、左脑完成2 3题,右脑完成1题。这样耗时是 \(\max(4+3, 2)=7\)。
6、左脑完成2题,右脑完成1、3题。这样耗时是 \(\max(4, 3+2)=5\)。
7、左脑完成3题,右脑完成1、2题。这样耗时是 \(\max(3, 2+4)=6\)。
8、全部右脑完成。这样耗时为 \(2+4+3=9\)。
因此第四个科目的最小时间为 \(5\) 分钟。
总时间显然为 \(5+4+6+5=20\)。
每道题有两种选择,分给左脑或右脑,因此可以 \(\rm DFS\)。本题数据量为 \(20\),因此不会超时。
形式一:形参版本(无需恢复现场)
#include <bits/stdc++.h>
int w[5], S[5][25];
int min = 0x3f3f3f3f, ans;
void dfs(int u, int i, int l, int r) {
if (u > w[i]) {
min = std::min(min, std::max(l, r));
return;
}
dfs(u + 1, i, l + S[i][u], r);
dfs(u + 1, i, l, r + S[i][u]);
}
int main()
{
std::ios::sync_with_stdio(false), std::cin.tie(nullptr);
std::cin >> w[1] >> w[2] >> w[3] >> w[4];
for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= w[i]; j++) {
std::cin >> S[i][j];
}
}
for (int i = 1; i <= 4; i++) {
min = 0x3f3f3f3f;
dfs(1, i, 0, 0);
ans += min;
}
std::cout << ans;
return 0;
}
形式二:设置全局变量(需恢复现场)
#include <bits/stdc++.h>
int w[5], S[5][25];
int min = 0x3f3f3f3f, ans, l, r;
void dfs(int u, int i) {
if (u > w[i]) {
min = std::min(min, std::max(l, r));
return;
}
l += S[i][u];
dfs(u + 1, i);
l -= S[i][u];
r += S[i][u];
dfs(u + 1, i);
r -= S[i][u];
}
int main()
{
std::ios::sync_with_stdio(false), std::cin.tie(nullptr);
std::cin >> w[1] >> w[2] >> w[3] >> w[4];
for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= w[i]; j++) {
std::cin >> S[i][j];
}
}
for (int i = 1; i <= 4; i++) {
min = 0x3f3f3f3f;
l = r = 0;
dfs(1, i);
ans += min;
}
std::cout << ans;
return 0;
}

浙公网安备 33010602011771号