首页 > 代码库 > HDU 1171 Big event in hdu
HDU 1171 Big event in hdu
这题 就是 简单的 多重背包应用..本来以为可以很快地写出来;
WA了无数次就是没找出哪里错了(有太自信的缘故);
百度了半天别人的代码,对照了半小时...说实话都要吐血了....;
终于发现了哪里错了;
教训,教训啊;再简单的题目也要慢慢来,不能太自信;
1 #include<iostream> 2 #define maxn 2000000 3 int v[1005],c[1005],dp[maxn]; 4 #define max(a,b) (a>b?a:b) 5 using namespace std; 6 int main() 7 { 8 //freopen("1171.txt","r",stdin); 9 int n,i,j,sum;10 while(~scanf("%d",&n))11 {12 memset(v,0,sizeof(v));13 memset(c,0,sizeof(c));14 sum=0;15 if(n<=0) break;16 for(i=1;i<=n;i++)17 {18 scanf("%d%d",v+i,c+i);19 sum+=v[i]*c[i];20 }21 memset(dp,0,sizeof(dp));22 int value=http://www.mamicode.com/sum/2;23 for(i=1;i<=n;i++)24 {25 if(v[i]*c[i]>=value)26 {27 for(j=v[i];j<=value;j++)28 dp[j]=max(dp[j],dp[j-v[i]]+v[i]);29 continue;30 }31 int k=1;32 while(k<c[i])33 {34 for(j=value;j>=v[i]*k;j--)35 dp[j]=max(dp[j],dp[j-k*v[i]]+k*v[i]);36 c[i]-=k;37 k+=k;38 }39 for(j=value;j>=v[i]*c[i];j--)40 dp[j]=max(dp[j],dp[j-c[i]*v[i]]+v[i]*c[i]);41 }42 43 printf("%d %d\n",sum-dp[value],dp[value]);44 }45 return 0;46 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。