这道题的题意是将石子分成两堆,使得两堆重量差最小,并求出其重量差。
刚开始看数据量小,就用dfs,结果超时,只好用0-1背包了,唉!
刚开始看数据量小,就用dfs,结果超时,只好用0-1背包了,唉!
#include<iostream>
using namespace std;
int dp[1000202],s[25];
int main()
{
int n,ans,sum,i,j;
while(scanf("%d",&n)!=-1)
{
sum=0;
for(i=0;i<n;i++)
{
scanf("%d",&s[i]);
sum+=s[i];
}
ans=sum/2;
memset(dp,0,sizeof(dp));
for(i=0;i<n;i++)
for(j=ans;j>=s[i];j--)
{
if(dp[j]<dp[j-s[i]]+s[i])
dp[j]=dp[j-s[i]]+s[i];
}
printf("%d\n",sum-2*dp[ans]);
}
return 0;
}