HDU 1171 Big Event in HDU

来源:互联网 发布:上海菜鸟网络嘉定仓 编辑:程序博客网 时间:2024/06/11 14:28

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1171


思路:多重背包转化成01背包


#include<stdio.h>#include<string.h>#define max(a,b) (a)>(b)?(a):(b)int dp[125000];int v[1001],c[1001];int main(){  int n,i,j,k,sum,t;  while(scanf("%d",&n)&&n>-1)  {      sum=0;     for(i=0;i<n;i++) {    scanf("%d%d",&v[i],&c[i]);sum+=v[i]*c[i]; } t=sum/2; for(i=0;i<=t;i++) dp[i]=0; for(i=0;i<n;i++)    for(k=1;k<=c[i];k++)  for(j=t;j>=v[i];j--)      dp[j]=max(dp[j],dp[j-v[i]]+v[i]);  printf("%d %d\n",sum-dp[t],dp[t]);  }  return 0;}