您的位置:首页 > 其它

HDU1171 Big Event in HDU

2014-09-18 16:43 190 查看
多重背包,也可以转化为01背包,则共有∑M件物品。

#include <cstdio>
#include <cstring>
int main()
{
int val[5005],c[250005],N,i,j,v,sum,NL,num,a,b,temp;
while(1)
{
scanf("%d",&N);
if(N<=0)break;
sum=0;
NL=1;
while(N--)
{
scanf("%d%d",&v,&num);
sum+=v*num;
for(i=NL;i<NL+num;i++)
val[i]=v;
NL+=num;
}
NL--;
v=sum/2;
memset(c,0,sizeof(c));
for(i=1;i<=NL;i++)
for(j=v;j>=val[i];j--)
if(c[j]<c[j-val[i]]+val[i])
c[j]=c[j-val[i]]+val[i];
a=c[v];
b=sum-c[v];
if(a<b){temp=b;b=a;a=temp;}
printf("%d %d\n",a,b);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm