POJ 1742 Coins
2016-07-08 13:34
295 查看
Description
People in Silverland use coins.They have coins of value A1,A2,A3…An Silverland dollar.One day Tony opened his money-box 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
乍一看,是一个多重背包,只要先将个数求出,再数出大于零的个数就可以,然而TLE。
再一读题,发现只需要判断是否可以达到,而不需要求个数,完全可以减一重循环。
代码如下:
People in Silverland use coins.They have coins of value A1,A2,A3…An Silverland dollar.One day Tony opened his money-box 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
乍一看,是一个多重背包,只要先将个数求出,再数出大于零的个数就可以,然而TLE。
再一读题,发现只需要判断是否可以达到,而不需要求个数,完全可以减一重循环。
代码如下:
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int n,m,ans,a[101],c[101],used[100001]; bool f[100001]; int main() { while(scanf("%d%d",&n,&m)&&n&&m) { for(int i=1;i<=n;i++) scanf("%d",a+i); for(int i=1;i<=n;i++) scanf("%d",c+i); memset(f,0,sizeof(f)); ans=0; f[0]=1; for(int i=1;i<=n;i++) { memset(used,0,sizeof(used)); for(int j=a[i];j<=m;j++) if(!f[j]&&f[j-a[i]]&&used[j-a[i]]+1<=c[i]) { f[j]=1; used[j]=used[j-a[i]]+1; ans++; } } printf("%d\n",ans); } return 0; }
相关文章推荐
- 小技巧,logo使用<img>嵌入
- 《精通MVC5.0》路由笔记
- centos7 dokcer fastdfs
- 模拟实现String类----传统写法
- JDK导入证书
- Android 绘制太极图
- SQL自定义函数split分隔字符串
- iOS开发(OC)——根据url播放音频
- 实战Apache+Tomcat集群和负载均衡
- VS2013调用armadillo使用KNN算法实现0-9数字分类
- HTML5使用Div标签来实现表格
- svn不提交user文件
- 文件上传的三种模式-Java
- 快速排序
- 幸福
- tornado 获取参数
- 用JQuery实现Ajax的简单小应用
- 学习UML实现、泛化、依赖、关联、聚合、组合
- 中文编码乱码问题
- jquery remove(),detach(),empty()