您的位置:首页 > 其它

HDU 1171 Big Event in HDU

2011-12-10 20:38 267 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1171

多重背包

我的代码

#include <stdio.h>
#include <string.h>
const int N=250010;
int f
,v[60],c[60];
int main()
{
int n,i,j,k,s,ss,cc;
while (scanf("%d",&n) && n>=0)
{
memset(f,0,sizeof(f)); f[0]=1;
ss=0;
for (i=1;i<=n;i++)
{
scanf("%d%d",&v[i],&c[i]);
ss+=v[i]*c[i];
}
s=ss/2;
for (i=1;i<=n;i++)
{
cc=c[i];
for (k=1;k<cc;cc-=k,k=k<<1)
for (j=s;j>=k*v[i];j--)
f[j]|=f[j-k*v[i]];
k=cc;
for (j=s;j>=k*v[i];j--)
f[j]|=f[j-k*v[i]];
}
while (!f[s]) s--;
printf("%d %d\n",ss-s,s);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: