timus 1005 stone pile

来源:互联网 发布:acr软件下载 编辑:程序博客网 时间:2024/03/28 16:39
这道题的题意是将石子分成两堆,使得两堆重量差最小,并求出其重量差。
刚开始看数据量小,就用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;}

原创粉丝点击