10 100 30 80 50 50
100 30 40 90 40 60
最小为:
130
1 3 4
2 5 6
说明:
res = max(a [1] + a [3] + a [4],a [2] + a [5] + a [6])= max(10 + 30 + 80,30 + 40 + 60 )= max(120,130)= 130
#include <bits/stdc++.h>
#define N 101
using namespace std;
int n,res;
int a[N],b[N],x[N];
void Solve() {
int SumA=0,SumB=0;
for (int i=1;i<=n;i++) {
if (x[i]==1) {
SumA+=a[i];
}
else SumB+=b[i];
}
res=min(res,max(SumA,SumB));
}
void Try(int i) {
for (int j=0;j<=1;j++) {
x[i]=j;
if (i==n) Solve();
else Try(i+1);
}
}
int main()
{
res=1000000009;
cin >> n;
for (int i=1;i<=n;i++) cin >> a[i];
for (int i=1;i<=n;i++) cin >> b[i];
Try(1);
cout << res;
return 0;
}
前n个元素现在基本上是解决方案
创建长度为n的数组,其中包含数组的前n个元素
排序第二个数组,<=如上定义