邮票分你一半

来源:互联网 发布:今有鸡翁一值钱五编程 编辑:程序博客网 时间:2024/04/27 22:20
//01背包,把邮票总面值和的一半当做背包容量#include<iostream>#include<cstring>#include<cmath>#define max(a,b) a>b? a:busing 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的生日

0 0
原创粉丝点击