题目链接:POJ - 1742

题目大意

现有 n 种不同的硬币,每种的面值为 Vi ,数量为 Ni ,问使用这些硬币共能凑出 [1,m] 范围内的多少种面值。

题目分析

使用一种 O(nm) 的 DP (据说这是类多重背包?),枚举每一种硬币,对于每一种硬币 i 枚举每一个面值 j ,如果这个面值 j 使用前 i-1 种硬币已经可以凑出,就直接跳过,否则尝试加入一个硬币 i ,看是否能凑出 j 。需要满足 (f[j - Vi] == true) && (UseNum[j - Vi] + 1 <= Ni) ,这样就可以了。对于每一个 i ,枚举 j 之前将 UseNum 数组清零。

代码

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>using namespace std;const int MaxN = 100 + 5, MaxM = 100000 + 5;int n, m, Ans;
int V[MaxN], Num[MaxN], UseNum[MaxM];bool f[MaxM];int main()
{while (true) {scanf("%d%d", &n, &m);if (n == 0 && m == 0) break;for (int i = 1; i <= n; ++i) scanf("%d", &V[i]);for (int i = 1; i <= n; ++i) scanf("%d", &Num[i]);Ans = 0;for (int i = 1; i <= m; ++i) f[i] = false;f[0] = true;for (int i = 1; i <= n; ++i) {for (int j = 1; j <= m; ++j) UseNum[j] = 0;for (int j = V[i]; j <= m; ++j) {if (f[j]) continue;if (f[j - V[i]] && UseNum[j - V[i]] + 1 <= Num[i]) {f[j] = true;UseNum[j] = UseNum[j - V[i]] + 1;}}}for (int i = 1; i <= m; ++i) if (f[i]) ++Ans;printf("%d\n", Ans);}return 0;
}

  

转载于:https://www.cnblogs.com/JoeFan/p/4165769.html

[POJ 1742] Coins 【DP】相关推荐

  1. 【POJ】1742 coins 【背包问题】

    1 思路: f[j](1<=j<=m)数组用来表示j是不是可以达到,现假设可达. b[j](1<=j<=m)数组用在第二层循环中,表示当价值为j时物品i已经用了几个.记录此值的 ...

  2. POJ 1745 Divisibility【DP】

    题意:给出n,k,n个数,在这n个数之间任意放置+,-号,称得到的等式的值能够整除k则为可划分的,否则为不可划分的. 自己想的是枚举,将所有得到的等式的和算出来,再判断它是否能够整除k,可是有1000 ...

  3. POJ - 1088 滑雪 【DP】【DFS】

    Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...

  4. 【DP】【期望】$P1850$换教室

    [DP][期望]\(P1850\)换教室 链接 题目描述 有 \(2n\) 节课程安排在$ n$ 个时间段上.在第 \(i\)(\(1 \leq i \leq n\))个时间段上,两节内容相同的课程同 ...

  5. Bailian2760 数字三角形【DP】

    2760:数字三角形 描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (图1) 图1给出了一个数字三角形.从三角形的顶部到底部有很多条不同的路径.对于每条路径,把路径上面的数加起来可 ...

  6. NUC1131 Triangle【DP】

    Triangle 时间限制: 1000ms 内存限制: 65536KB 通过次数: 1总提交次数: 1 问题描述 图1表示一个数字三角形. 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 ...

  7. LeetCode:完全平方数【279】【DP】

    LeetCode:完全平方数[279][DP] 题目描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 示 ...

  8. 【DP】序列 题解

    [DP]序列 题解 序列 题目 一个长度为kkk的整数序列bbb 1,bbb 2,-,bkbkbk(1≤bbb 1≤bbb 2≤-≤bkbkbk≤NNN)称为"好序列"当且仅当后一 ...

  9. POJ 3414 Pots【BFS】+ Python

    原题链接: 3414 -- Pots 参考资料:POJ 3414 - Pots | 眈眈探求 POJ 3414 Pots[BFS][图搜] - it610.com 一 特别注意: 1. 每一种操作对应 ...

最新文章

  1. git生成ssh keys步骤与使用
  2. 【Python 第8课】while
  3. 电压放大倍数公式运放_【专题2:电子工程师 之 硬件】 之 【43.运算放大器详解e 运算放大器虚短和虚断】...
  4. 移动端与PHP服务端接口通信流程设计(基础版)
  5. 基于注解的Spring AOP的配置和使用--转载
  6. Java黑皮书课后题第5章:*5.20(打印2到1000之间的素数)修改程序清单5-15,打印2到1000之间(包括2和1000)的所有素数。每1行显示8个素数,数字之间用一个空格字符隔开
  7. MyBatis-Oracle-selectKey返回主键
  8. 多个div并排居中显示
  9. WPF 自定义BarChartControl(可左右滑动的柱状图)
  10. juniper srx 3400 双机 配置
  11. 【2022最详细--SVN客户端安装教程】
  12. 【安全】(三)Django之SQL注入防御
  13. 天狗农业技术网采用的跨平台的Amaze UI设计
  14. 使用Android Studio 查看内存泄漏
  15. 约瑟夫环!编 号是1,2,??,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向 自1开始顺序报数,报到m时停止报数。
  16. 2018——幸福都是奋斗出来的
  17. slides.com 导出PDF
  18. google的开源工程,真多
  19. 面试摘要【持续更新】
  20. 中国石油大学-《现代应用文写作》期末网考题

热门文章

  1. 41、OrthoMCL和mcl软件进行基因家族分析
  2. MQTT客户端库-Paho GO
  3. [Freescale]E9学习笔记-LTIB总结
  4. 关于单片机串口发送和接收的问题
  5. Bootstrap系列 -- 23. 图片
  6. Linux编程简介——VI
  7. WEBSERVICE 之WSDL
  8. “软件宝宝”出生前,安全系列文章(一)
  9. 在Matlab2006a中如何创建.net组件
  10. 坡度土方计算案例_土石方工程造价中的细节解析(案例+计算式)