//只放核心代码
const int N = 25;
int s[5];
int arr[N][5];
int left_t, right_t, min_n;
long long ans;
void dfs(int u, int k) { //u是遍历个数,k是第几道题
if (u == s[k] + 1) {
//遍历得 左边和右边时间,得最大的,在整个的搜索中得到最大的最小
min_n = min(min_n, max(left_t, right_t));
return;
}
//遍历所有情况 并回溯
left_t += arr[u][k];
dfs(u + 1, k);
left_t -= arr[u][k];
right_t += arr[u][k];
dfs(u + 1, k);
right_t -= arr[u][k];
}
int main() {
scanf("%d%d%d%d", &s[1], &s[2], &s[3], &s[4]);
for (int i = 1; i <= 4; i++) {
left_t = 0;
right_t = 0;
min_n = 423423;
for (int j = 1; j <= s[i]; j++) {
scanf("%d", &arr[j][i]);
}
//每个单独进行搜索
dfs(1, i);
//加上所有
ans += min_n;
}
printf("%d", ans);
return 0;
}
P2392 kkksc03考前临时抱佛脚
于 2022-10-14 10:46:13 首次发布