题目:http://poj.org/problem?id=1742

可以正常地多重背包。但是看了《算法竞赛入门经典》,收获了贪心的好方法。

因为这里只需知道是否可行,不需更新出最优值之类的,所以:

新出来一个可行的必然是只有用了当前面值才可行的,就记录下使它可行最少用多少个当前面值,以资后续限制在 c [ i ] 个以内。

  use 数组每次清零,只记当前面值用了几个就行。

之所以正常多重背包不能这样,是因为当前体积要不要通过若干个当前物品来更新与体积为 j - a [ i ] 时 有无用/用了几个 当前物品没有必然联系;

  这里之所以有联系,是因为当前体积若想“可行”,必须通过“使用当前面积”。这个“必须”提供了贪心优化的空间。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,a[105],c[105],use[100005],ans;
bool b[100005];
int main()
{while(1){scanf("%d%d",&n,&m);if(!n&&!m)return 0;memset(b,0,sizeof b);ans=0;b[0]=1;        /////b[0]=1for(int i=1;i<=n;i++)scanf("%d",&a[i]);for(int i=1;i<=n;i++)scanf("%d",&c[i]);for(int i=1;i<=n;i++){memset(use,0,sizeof use);for(int j=a[i];j<=m;j++)if(!b[j]&&b[j-a[i]]&&use[j-a[i]]<c[i]){b[j]=1;use[j]=use[j-a[i]]+1;ans++;}}printf("%d\n",ans);}
}

转载于:https://www.cnblogs.com/Narh/p/8571223.html

POJ1742Coins相关推荐

  1. dp入门 专题记录 2017-7-26

    POJ3176-Cow Bowling 题目大意:现有n行数,以金字塔的形式排列,即第一行一个数字,第二行2个数字,依次类推,现在需要找一条从第一层到第n层的路线,使得该路线上的所有点的权值和最大 思 ...

  2. dp问题 -挑战例题 2017-7-24

    01 背包 题意: 在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2--Wn(Wi为整数),与之相对应的价值为P1,P2--Pn(Pi为整数).求背包能够容纳的最大价值. f[i] ...

  3. 背包例题の01,完全,多重

    01背包:TYVJ1096-数字组合 题目链接:http://www.joyoi.cn/problem/tyvj-1096 题目大意 给N个正整数,求能组成M的方法有多少种 解题思路 不是说了吗,01 ...

  4. 多重背包的二进制拆分法

    在多重背包的直接拆分法中,个数为$c[i]$的物体被拆成$c[i]$种不同的物体 这样就使得物体的种类增加了很多,使得算法效率很低. 上述方法把$c[i]$拆成$c[i]$个1,于是任意选择可以表示出 ...

最新文章

  1. 编译x86架构的openwrt系统,让笔记本从u盘启动openwrt
  2. ZooKeeper启动过程2:FastLeaderElection
  3. LeetCode 493. 翻转对(归并排序)
  4. 数学也浪漫 数学的几句贴心话
  5. 微软MVC对架构的一点思考
  6. linux中vi编辑器(转载)
  7. 计算机图标怎么隐藏cmd,一个神奇的bat批处理文件,更好的隐藏电脑里的文件或者文件夹...
  8. 【车道线检测与寻迹】【1月8日】车辆、道路模型与道路跟踪
  9. 工业相机参数及选型参考
  10. 幼儿计算机教材有哪些,中华字经幼儿教材
  11. linux中添加一行,linux – sed:在某个位置插入一行
  12. occurs-free
  13. 奶茶果茶饮品店数字化转型| 奶茶店小程序 | 餐饮外卖系统
  14. 复现ReDet RTX 3090 pytorch1.8.1
  15. 图论学习笔记——一笔画(最少笔画)问题
  16. 微信小程序---轮播图
  17. 简单有趣,半小时漫画中国史
  18. 已解决使用Python分割图片
  19. 低通滤波器转带通滤波器公式由来_高手讲解滤波器原理(二),轻松搞定LC滤波器原理...
  20. 【Unity】11.3 基本碰撞体(箱体、球形、胶囊、网格)

热门文章

  1. NVIDIA官方指南:libav编译支持Nvidia Codec(结果失败)
  2. 编译好的编译ffmpeg又出错:更改输出目录产生各种古怪错误
  3. 编译libpng出错:pnglibconf.c fatal error: zlib.h 没有那个文件或目录
  4. 移动终端的应用杀掉进程后,接收消息启动应用的简要技术说明
  5. LINUX上开发ffmpeg程序,查看链接的库
  6. 管理感悟:当领导就要敢于,及时做出决策
  7. android实现1000次点击,android – AdMob收入和替代方案:展示次数和点击次数[已关闭]...
  8. linux 查看进程与端口以及内存资源
  9. HTML弹窗上下一步,JS实现从网页顶部掉下弹出层效果的方法
  10. 计算机的创新产品,这几种电脑创新功能 空有喝彩没人买