2844 Coins hdu 一些数字生成小于等于m的数的个数转换成多重背包问题
2010-07-21 08:03
363 查看
Coins
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 695 Accepted Submission(s): 277
Problem Description
Whuacmers use coins.They have coins of value A1,A2,A3...An Silverland dollar. One day Hibix opened purse and found there were some coins. He decided to buy a very nice watch in a nearby shop. He wanted to pay the exact price(without change) and he known the price would not more than m.But he didn't know the exact price of the watch.
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.
Input
The input contains several test cases. The first line of each test case contains two integers n(1 ≤ n ≤ 100),m(m ≤ 100000).The second line contains 2n integers, denoting A1,A2,A3...An,C1,C2,C3...Cn (1 ≤ Ai ≤ 100000,1 ≤ Ci ≤ 1000). The last test case is followed by two zeros.
Output
For each test case output the answer on a single line.
Sample Input
3 10 1 2 4 2 1 1 2 5 1 4 2 1 0 0
Sample Output
8 4#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int f[100006],a[200],w[200],num[200]; int main() { int n,m; while(scanf("%d%d",&n,&m)==2) { if(n==0&&m==0) break; for(int i=0;i<n;i++) {cin>>a[i];w[i]=a[i];} for(int i=0;i<n;i++) cin>>num[i]; memset(f,0,sizeof(f)); for(int i=0;i<n;i++) { if(a[i]*num[i]>m) //完全背包 { for(int j=a[i];j<=m;j++) f[j]=max(f[j],f[j-a[i]]+w[i]); } else { int l=num[i],k=1; while(k<l) { for(int j=m;j>=k*a[i];j--) f[j]=max(f[j],f[j-k*a[i]]+k*w[i]); l-=k; k*=2; } for(int j=m;j>=l*a[i];j--) f[j]=max(f[j],f[j-l*a[i]]+l*w[i]); } } int cnt=0; for(int i=1;i<=m;i++) { //cout<<f[i]<<".."; if(f[i]==i) cnt++; }//cout<<endl; printf("%d/n",cnt); } return 0; }
相关文章推荐
- 背包问题:求小于M并且加起来和等于N的数
- 解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
- 解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
- 编程求解,输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m。要求将所有的可能组合列出来(背包问题求解)
- JavaScript 特有奇葩问题“字符串类型与数字类型混乱”的分析与解决,与类型转换
- 类库------对一些字符串进行操作的类1.判断输入是否数字2.截取字符串函数3.过滤输入信息4.生成随机数5.生成验证码图片6.获取汉字第一个拼音7.半角转全角8.全角转半角
- 基础背包问题的一些题目!!
- 将求最大的连续组合值转换为背包问题
- C++上机报告 编程序生成一张从英尺到米的转换表(1米大约等于3.28英尺),以方便工厂里工人师傅使用。输出形式如下图所示,第i行第j列的值vij代表i*10+j英尺对应的米数。每输出10英尺的转换表
- 使用Java jaxb处理bean生成xml中一些问题
- hdu 3450 Counting Sequences 树状数组+DP 求相邻两个数字的绝对值小于等于H并且序列长度的序列个数
- 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从
- Robberies(HDU2955):01背包+概率转换问题(思维转换)
- win32平台中的程序转换为wince中的一些错误 . 未能为“VCCLCompilerTool”工具生成命令行
- 一些项目——背包问题
- 无效的 CurrentPageIndex 值.它必须大于等于 0 且小于 PageCount!的问题
- Cocos2d的字体生成软件Hiero v2.0 - Bitmap Font Tool的一些问题
- python一些编码的转换格式问题
- struts2国际化和语言转换遇到的一些问题和解决方案及了解到的2.0的特性
- 关于mysql、数字类型之间转换的问题