hdu 2844 多重背包
来源:互联网 发布:羊毛大衣怎么洗 知乎 编辑:程序博客网 时间:2024/04/29 16:27
如题:http://acm.hdu.edu.cn/showproblem.php?pid=2844
You are to write a program which reads n,m,A1,A2,A3...An and C1,C2,C3...Cn corresponding to the number of Tony's coins of value A1,A2,A3...An then calculate how many prices(form 1 to m) Tony can pay use these coins.
3 101 2 4 2 1 12 51 4 2 10 0
84
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define max(a,b)(a>b?a:b)
int w[103];
int num[103];
int f[100005];
int n,m;
void zeroonePack(int c,int w)
{
int j;
for(j=m;j>=c;j--)
f[j]=max(f[j],f[j-c]+w);
}
void completePack(int c,int w)
{
int j;
for(j=c;j<=m;j++)
f[j]=max(f[j],f[j-c]+w);
}
void multiplePack(int c,int w,int num)
{
if(m<=c*num)
{
completePack(c,w);
return;
}
int k=1;
while(k<num)
{
zeroonePack(c*k,w*k);
num-=k;
k*=2;
}
zeroonePack(c*num,w*num);
}
int main()
{
while(~scanf("%d%d",&n,&m)&&n&&m)
{
int i,j,k;
memset(f,0,sizeof(f));
for(i=1;i<=n;i++)
scanf("%d",&w[i]);
for(i=1;i<=n;i++)
scanf("%d",&num[i]);
for(i=1;i<=n;i++)
multiplePack(w[i],w[i],num[i]);
int sum=0;
for(i=1;i<=m;i++)
if(f[i]==i)
sum++;
printf("%d\n",sum);
}
}
- HDU-2844 多重背包
- hdu 2844 多重背包
- hdu 2844 多重背包
- hdu 2844 多重背包
- hdu 2844 多重背包
- hdu 2844 多重背包
- HDU 2844 (多重背包)
- hdu 2844(多重背包)
- hdu 2844 多重背包
- HDU 2844 (多重背包)
- hdu 2844(多重背包)
- hdu 2844 Coins 多重背包
- hdu 2844 Coins 多重背包
- HDU 2844 Coins -- 多重背包
- hdu 2844 Coins - 多重背包
- hdu 2844 Coins(多重背包)
- hdu 2844 Coins 多重背包
- Coins hdu 多重背包 2844
- S4S2H4架构实现整合
- three.js 源码注释(六十八)extras/geometries/BoxGeometry.js
- XD01-客户主数据屏幕增强
- 黑马程序员-----Java基础(五):面向对象之一
- Configuration.buildSessionFactory()过时之后,获取SessionFactory的Util类写法及一些设想
- hdu 2844 多重背包
- Android源码分析-全面理解Context
- ubuntu查看内存占用
- std::string总结
- javascript弹出层输入框
- HDU 3681 Prison Break
- 基于smack的即时聊天系统之文件接收功能实现
- three.js 源码注释(六十九)extras/geometries/CircleGeometry.js
- 直方图均衡化程序实现