题目大意:
求做完所有习题集的最短时间,两边脑子可以同时计算两道题,但仅限于一科
输入格式:
本题包含5行数据
输出格式:
输出一行,为复习完毕最短时间
说明/提示:
1≤s1,s2,s3,s4≤20
1≤A1,A2,…,As1,B1,B2,…,Bs2,C1,C2,…,Cs 3,D1,D2,…,Ds4≤60
代码:
#include<bits/stdc++.h>
using namespace std;
int s[4];
int a[4][25];
int min_cost;
void dfs(int now, int dep, int Lsum, int Rsum) { // 习题集,题目,左,右
if (dep == s[now] + 1) {
min_cost = min(min_cost, max(Lsum, Rsum));
return;
}
dfs(now, dep + 1, Lsum + a[now][dep], Rsum);
dfs(now, dep + 1, Lsum, Rsum + a[now][dep]);
}
int main() {
for (int i = 0; i < 4; i++) scanf("%d", &s[i]);
for (int i = 0; i < 4; i++)
for (int j = 1; j <= s[i]; j++) scanf("%d", &a[i][j]);
int ans = 0;
for (int i = 0; i < 4; i++) {
min_cost = 2e9;
dfs(i, 1, 0, 0);
ans += min_cost;
}
printf("%d\n", ans);
return 0;
}