URAL 1005

来源:互联网 发布:linux镜像站 编辑:程序博客网 时间:2024/05/16 14:07

一堆石头分成两队求最小的差值。

#include<cstdio>#include<string.h>#include<iostream>#include<cmath>#include<cstdlib>using namespace std;int a[22];int dp[2500000];int main(){int n;cin>>n;int sum=0;for(int i=0;i<n;i++){cin>>a[i];sum+=a[i];}for(int i=0;i<n;i++)for(int k=sum;k>=a[i];k--)dp[k]=max(dp[k],dp[k-a[i]]+a[i]);int minn=INT_MAX;for(int i=0;i<=sum;i++)if(dp[i]&&abs(sum-2*dp[i])<minn)minn=abs(sum-2*dp[i]);cout<<minn<<endl;return 0;}