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;
}
#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;
}
相关文章推荐
- hdu1171: Big Event in HDU
- HDU1171 Big Event in HDU
- hdu1171 Big Event in HDU --01背包
- hdu1171 Big Event in HDU(多重背包)
- HDU1171:Big Event in HDU(多重背包)
- HDU1171:Big Event in HDU(多重背包分析)
- hdu1171 Big Event in HDU
- hdu1171 Big Event in HDU
- HDU1171 Big Event in HDU(01背包的转化,多重背包)
- Big Event in HDU(HDU1171)可用背包和母函数求解
- hdu1171--C - Big Event in HDU(多重背包+二进制优化)
- hdu1171 Big Event in HDU(典型多重背包)
- hdu1171 Big Event in HDU(DP)
- HDU1171-Big Event In HDU(母函数、动态规划)
- hdu1171 Big Event in HDU (多重背包)
- hdu1171 Big Event in HDU 01-背包
- HDU1171:Big Event in HDU
- hdu1171 Big Event in HDU 动态规划
- hdu1171 Big Event in HDU(01背包)
- hdu1171 Big Event in HDU(多重背包)