1 思路:

f[j](1<=j<=m)数组用来表示j是不是可以达到,现假设可达。
b[j](1<=j<=m)数组用在第二层循环中,表示当价值为j时物品i已经用了几个。记录此值的原因:例如已经知道了j=10可以取到,现还有物品A价值2,数目2。不能通过此信息知道12、14可达,因为j=10可达的时候有可能已经把A这两个物品都用过了,所以需要记录此值,当b[10]=2时表明A已经用过2次了,不能再用了,故12、14都不能可达。
现假设有一物品价值a[i],数量为c[i],若b[j-a[i]]<c[i]表示i还没有用完,还可以再用。
f[j-a[i]] == 1表明j-a[i]可以达到,且f[j]==0表示f[j]以前还没有取到过。j>=a[i]条件是必须的,否则不可能取这第i件物品。若上面条件同时满足,则说明j可以达到,设置f[j]=1, 此时i用的数目因为j的使用而多了一个,所以b[j]=b[j-a[i]]+1。

2 代码

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;const int maxn = 110;
const int maxm = 100010;int a[maxn], c[maxn], b[maxm];
bool f[maxm];int n, m, ans;int main(int argc, char *argv[])
{int i, j;while (scanf("%d%d",&n,&m) && n && m){for(i=1; i<=n; i++) cin>>a[i];for(i=1; i<=n; i++) cin>>c[i];ans = 0;memset(f, 0, sizeof(f));f[0] = 1;for(i=1; i<=n; i++){memset(b, 0, sizeof(b));for(j=1; j<=m; j++)if(j>=a[i] && !f[j] && f[j-a[i]] && b[j-a[i]]+1<=c[i]){f[j]=1;b[j] = b[j-a[i]]+1;ans ++;}}cout<<ans<<endl;}return 0;
}
footnote

感谢ccy!

Author: visaya fan <visayafan[AT]gmail.com>

Date: 2011-08-24 01:47:48

HTML generated by org-mode 6.33x in emacs 23

【POJ】1742 coins 【背包问题】相关推荐

  1. [POJ 1742] Coins 【DP】

    题目链接:POJ - 1742 题目大意 现有 n 种不同的硬币,每种的面值为 Vi ,数量为 Ni ,问使用这些硬币共能凑出 [1,m] 范围内的多少种面值. 题目分析 使用一种 O(nm) 的 D ...

  2. POJ 1742 Coins ( 经典多重部分和问题 DP || 多重背包 )

    题意 : 有 n 种面额的硬币,给出各种面额硬币的数量和和面额数,求最多能搭配出几种不超过 m 的金额? 分析 : 这题可用多重背包来解,但这里不讨论这种做法. 如果之前有接触过背包DP的可以自然想到 ...

  3. POJ 1742 Coins

    题目链接 题意 给出N个硬币和数量,求一共可以组合成几种情况 AC bitset 用二进制的下标表示和,最后1的个数表示种类数 优化:用二次方移动加快速度 例如: 移动7次(需要4次) 1.0000 ...

  4. Coins POJ - 1742(题解)

    原题 http://poj.org/problem?id=1742 题目大意 给出硬币面额及每种硬币的个数,求从1到m能凑出面额的个数. 题目分析 多重背包模板题,这里讲一下用一维dp来解这道题.与完 ...

  5. Coins POJ - 1742(多重背包+是否装满问题)

    题意: 给定n种面值的硬币面值分别为WiW_{i}Wi​个数为CiC_{i}Ci​,问用这些硬币可以组成1~m之间的多少面值. 题目: People in Silverland use coins.T ...

  6. 小算法小心情:背包问题就是陪你看花开向阳

    一开始接触背包问题,总会有些困扰,无法完全理解,或者说不断地忘记所谓的公式,特神说分享,可以让许多人少走弯路,我觉得颇有道理,其实我想做的,只是努力让让算法变得看上去简单易懂一些,因为我也曾是个迷惘无 ...

  7. D(背)P(包)专题

    D(背)P(包)专题 标签(空格分隔): ACM DP 干货 ​ ShengRang && Thea.R ​ 2016.07.11 D背P包专题 01背包 POJ 2923 Reloc ...

  8. delphi 关闭时缩小到托盘_delphi 实现最小化系统托盘

    1.new -->application 2.在form1中加入一个tPopMenu 命名为pm1 3.uses ShellAPI; 4.定义一个常量在 const WM_TRAYMSG = W ...

  9. 【缄*默】 #DP# 各种DP的实现方法(更新ing)

    DP =「状态」+「阶段」+「决策」 基本原理 = 「有向无环图」+「最优子结构」+「无后效性」 目录 一. 线性DP { 1.概念引入 } { 2.例题详解 } [例题1]caioj 1064 最长 ...

最新文章

  1. Hbase 常见错误总结——摘自忘了
  2. java web 默认页面配置文件_Tomcat中配置全局的错误页面(如404)+删除Tomcat中webapps目录下的自带项目,防止Tomcat默认文件泄露...
  3. 【杂谈】关于批量采购与教材试点深度学习之图像识别,模型设计,人脸图像处理书籍相关问题...
  4. 阿克斯java表_java 入门第三季的6-5 作业, 希望大家指点
  5. 五、MySQL联合查询学习笔记 + 查询总结(详解)
  6. 宁德时代:拟70亿投建储能电池项目
  7. 老公想入手一块10万左右的手表有哪些推荐?
  8. 清华大学信息 计算机科学与技术,清华大学信息科学与技术国家实验室
  9. Rust : 独一无二的Some
  10. 傅里叶光学导论_激光位移传感器的光学系统设计
  11. ACM:竞赛技巧(c++)
  12. ARcore概述及开发环境.md
  13. Python 正则表达式提取文件后缀名
  14. 【数理称谓】数术记遗
  15. NLPCC tutorial
  16. sendgrid html text,包括里面sendgrid鄂麦邮件的内容我的HTML代码
  17. 【Matlab】求解微分方程{上}(通解和特解)
  18. 使用SCRAPY框架获取网易云排行榜歌单
  19. Samsung手机常用工程命令
  20. .net中的泛型全面解析

热门文章

  1. java正则测试_Java的正则表达式
  2. 复杂存储过程学习_对象存储在无人驾驶高精度地图的场景实践
  3. Windows下通过FTP自动备份数据到服务器并删除指定天数前的备份
  4. 对NUnitAddIn做了下修改
  5. react系列项目地址
  6. centos6.8防火墙模块未加载
  7. tensorflow基础-placeholder
  8. 已知两点的经度和纬度,计算两点间的距离(php,javascript)
  9. 步进电机的单双极驱动
  10. 使用命令启动IIS管理器