花了好长时间都没看出bug
#include<iostream>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int all_time = 0;
int recursion(int start,int L,int a[])
{
if(start >= L) return 0;
int min_num;
//start认为是右脑要做的题
//next代表要做的下一道题,认为是左脑要做的题
int next = start+1;
//当next<L时说明还有题没做,a[next]=0说明已经做过了。
while(a[next] == 0&&next < L) next++;
//如果左脑要做的题已经超出范围,就直接加上右脑做题的时间
if(next >= L) all_time += a[start];
else
{
//找出要做的两道题中要花费时间最少的
min_num = min(a[start],a[next]);
all_time += min_num;
//经过这段时间后更新两道题的剩余时间
a[start] -= min_num;
a[next] -= min_num;
//更新后的时间有三种情况:
//1.右脑做的题时间还有剩。2.左脑做的题时间还有剩 3.两个题都做完了
if(a[start] != 0) recursion(start,L,a);
else if(a[next] != 0) recursion(next,L,a);
else if(a[start] == 0 && a[next] == 0)recursion(next+1,L,a);
}
return all_time;
}
int main()
{
int s[4];
int i;
for(i = 0;i<4;i++)
{
cin >> s[i];
}
int T = 0;
while(T < 4)
{
int* a = (int*)malloc(sizeof(int)*s[T]);
int j;
for(j = 0;j<s[T];j++)
{
cin >> a[j];
}
if(s[T] == 1) all_time +=a[0],T++;
else
{
recursion(0,s[T],a);
T++;
}
free(a);
}
cout << all_time << endl;
return 0;
}