//01背包,把邮票总面值和的一半当做背包容量
#include<iostream>
#include<cstring>
#include<cmath>
#define max(a,b) a>b? a:b
using namespace std;
int main()
{
int m,n,v[1005],i,j,sum,dp[100005];
cin>>m;
while(m--){
memset(v,0,sizeof(v));
memset(dp,0,sizeof(dp));
sum=0;
cin>>n;
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<<fabs((sum-dp[sum/2])-dp[sum/2])<<endl;
}
return 0;
}
总结:01背包,见注释。类似的还有zb的生日