//01背包
#include<iostream>
#include<cstring>
#define max(a,b) a>b? a:b
using namespace std;
int main()
{
int n,sum,v[25],i,j,dp[100005];//开始开了20万,后来想着10万就行
while(cin>>n){
sum=0;
memset(v,0,sizeof(v));
memset(dp,0,sizeof(dp));
for(i=0;i<n;i++){
cin>>v[i];
sum+=v[i];
}
for(i=0;i<n;i++){
for(j=sum/2;j>=v[i];j--)
dp[j]=max(dp[j],dp[j-v[i]]+v[i]);
}
cout<<sum-2*dp[sum/2]<<endl;
}
return 0;
}
总结:跟邮票分你一半 一样