很显然,此题答案为:
max(∑i∈Sbi−∑i∈Tai,∑i∈Tbi−∑i∈Sai)
极为
max(∑n−1i=0bi−∑i∈T(ai+bi),∑i∈T(ai+bi)−∑n−1i=0ai)
于是
dp
求出
ai+bi
的所有可能和即可 代码如下:
#include<bits/stdc++.h>
using namespace std;
int a[
55],b[
55];
bool dp[
10000005];
int main(){
int n,res1=
0,res2=
0,sum=
0,ans=
10000005;
scanf(
"%d",&n);
for(
int i=
1;i<=n;i++){
scanf(
"%d",&a[i]);
res1+=a[i];
}
for(
int i=
1;i<=n;i++){
scanf(
"%d",&b[i]);
res2+=b[i];
a[i]+=b[i];
}
dp[
0]=
1;
for(
int i=
1;i<=n;i++){
sum+=a[i];
for(
int j=sum;j>=a[i];j--)
if(dp[j-a[i]])dp[j]=
1;
}
for(
int i=
0;i<=res1+res2;i++){
if(!dp[i])
continue;
ans=min(ans,max(res2-i,i-res1));
}
printf(
"%d\n",ans);
return 0;
}