标签:
//平分硬币问题
//对sum/2进行01背包,sum-2*dp[sum/2]
#include <iostream> #include <cstring> #include <algorithm> using namespace std; int value[100000],dp[100000]; int main() { int n,m,sum,sum1; cin>>n; while(n--) { cin>>m; sum=0; for(int i=1;i<=m;i++) { cin>>value[i]; sum+=value[i]; } sum1=sum/2; memset(dp,0,sizeof(dp)); for(int i=1;i<=m;i++) for(int j=sum1;j>=value[i];j--) dp[j]=max(dp[j],dp[j-value[i]]+value[i]); cout<<sum-2*dp[sum1]<<endl; } return 0; }
标签:
原文地址:http://www.cnblogs.com/nefu929831238/p/5635366.html