将左脑和右脑单独去看,任务由大到小分配,下面有一个举例,想知道为什么错了(测试的用例明明也没错(小声)
eg: 5 4 9 5 2 6 排序 9 6 5 4 2 左右分配为 左:9 4 右:6 5 2 返回13 (先把9分配给左脑,然后右脑分配6 此时右脑任务量小于左脑,把4分配给右脑 之后右脑任务量大于左脑,将下一个任务分配给左脑 以此类推,最终返回较大的数)
下面是代码部分
//P2392 kkksc03考前临时抱佛脚
#include<stdio.h>
#include<stdlib.h>
void soft(int* arr,int len) {//给数组从大到小排序,因为数据量不大,用了冒泡
for (int i = 0; i < len; i++) {
for (int j = 0; j <len-1- i; j++) {
if (arr[j] < arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int js(int* arr,int len) {//核心部分,计算单个的最短时间
int ans[2] = {0};
for (int i = 0; i < len; i++) {
if (ans[0] > ans[1]) ans[1] += arr[i]; //如果左脑用时大于右脑,任务安排给右脑
else ans[0] += arr[i]; //反之安排给左脑
}
return ans[0] > ans[1] ? ans[0] : ans[1]; //返回较大的用时
}
int main() {
int s[4],fans=0;
for (int i = 0; i < 4; i++) scanf("%d", s + i);
for (int i = 0; i < 4; i++) {
int* nums = malloc(sizeof(int) * s[i]);
for (int j = 0; j < s[i]; j++) {
scanf("%d", nums + j);
}
soft(nums,s[i]);//给数组进行从大到小的排序
fans += js(nums, s[i]);//计算结束后进行累加整合
}
printf("%d\n", fans);
return 0;
}