#include <bits/stdc++.h>
using namespace std;
int a[21], n[5], b[5], lar, sm, c;
void cai(int n, int left)
{
if (n == 0)
{
int right = lar - left;
if (right > left )
{
if (right - left < sm)
{
sm = right - left;
c = right;
}
}
else
{
if (left - right < sm)
{
sm = left - right;
c = left;
}
}
return;
}
cai (n - 1, left);
left += a[n];
cai (n - 1, left);
}
int main()
{
int i;
cin >> n[1] >> n[2] >> n[3] >> n[4];
lar = 0;
for (i = 1; i <= n[1]; ++i)
{
cin >> a[i];
lar += a[i];
}
sm = lar;
cai(n[1], 0);
b[1] = c;
lar = 0;
for (i = 1; i <= n[2]; ++i)
{
cin >> a[i];
lar += a[i];
}
sm = lar;
cai(n[2], 0);
b[2] = c;
lar = 0;
for (i = 1; i <= n[3]; ++i)
{
cin >> a[i];
lar += a[i];
}
sm = lar;
cai(n[3], 0);
b[3] = c;
lar = 0;
for (i = 1; i <= n[4]; ++i)
{
cin >> a[i];
lar += a[i];
}
sm = lar;
cai(n[4], 0);
b[4] = c;
cout << b[1] + b[2] + b[3] + b[4] << endl;
return 0;
}
这是我的一次提交的代码(90分)
函数作用是搜索所需最少的时间
实现方法是将任务尽可能平均分配给左右两脑
取左右两脑中做大的时间作为完成这门学科所需的时间
#include <bits/stdc++.h>
using namespace std;
int a[21], n[5], b[5], lar, sm, c;
void cai(int n, int left)
{
if (n == 0)
{
int right = lar - left;
if (right > left )
{
if (right - left <= sm)
{
sm = right - left;
c = right;
}
}
else
{
if (left - right <= sm)
{
sm = left - right;
c = left;
}
}
return;
}
cai (n - 1, left);
left += a[n];
cai (n - 1, left);
}
int main()
{
int i;
cin >> n[1] >> n[2] >> n[3] >> n[4];
lar = 0;
for (i = 1; i <= n[1]; ++i)
{
cin >> a[i];
lar += a[i];
}
sm = lar;
cai(n[1], 0);
b[1] = c;
lar = 0;
for (i = 1; i <= n[2]; ++i)
{
cin >> a[i];
lar += a[i];
}
sm = lar;
cai(n[2], 0);
b[2] = c;
lar = 0;
for (i = 1; i <= n[3]; ++i)
{
cin >> a[i];
lar += a[i];
}
sm = lar;
cai(n[3], 0);
b[3] = c;
lar = 0;
for (i = 1; i <= n[4]; ++i)
{
cin >> a[i];
lar += a[i];
}
sm = lar;
cai(n[4], 0);
b[4] = c;
cout << b[1] + b[2] + b[3] + b[4] << endl;
return 0;
}
这是我第二次的代码(100分)
相比之前只多了个等于号
但是为什么加个等于号就过了?
求大佬解答
方便的话麻烦给个样例