POJ1742Coins
题目: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相关推荐
- dp入门 专题记录 2017-7-26
POJ3176-Cow Bowling 题目大意:现有n行数,以金字塔的形式排列,即第一行一个数字,第二行2个数字,依次类推,现在需要找一条从第一层到第n层的路线,使得该路线上的所有点的权值和最大 思 ...
- dp问题 -挑战例题 2017-7-24
01 背包 题意: 在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2--Wn(Wi为整数),与之相对应的价值为P1,P2--Pn(Pi为整数).求背包能够容纳的最大价值. f[i] ...
- 背包例题の01,完全,多重
01背包:TYVJ1096-数字组合 题目链接:http://www.joyoi.cn/problem/tyvj-1096 题目大意 给N个正整数,求能组成M的方法有多少种 解题思路 不是说了吗,01 ...
- 多重背包的二进制拆分法
在多重背包的直接拆分法中,个数为$c[i]$的物体被拆成$c[i]$种不同的物体 这样就使得物体的种类增加了很多,使得算法效率很低. 上述方法把$c[i]$拆成$c[i]$个1,于是任意选择可以表示出 ...
最新文章
- 编译x86架构的openwrt系统,让笔记本从u盘启动openwrt
- ZooKeeper启动过程2:FastLeaderElection
- LeetCode 493. 翻转对(归并排序)
- 数学也浪漫 数学的几句贴心话
- 微软MVC对架构的一点思考
- linux中vi编辑器(转载)
- 计算机图标怎么隐藏cmd,一个神奇的bat批处理文件,更好的隐藏电脑里的文件或者文件夹...
- 【车道线检测与寻迹】【1月8日】车辆、道路模型与道路跟踪
- 工业相机参数及选型参考
- 幼儿计算机教材有哪些,中华字经幼儿教材
- linux中添加一行,linux – sed:在某个位置插入一行
- occurs-free
- 奶茶果茶饮品店数字化转型| 奶茶店小程序 | 餐饮外卖系统
- 复现ReDet RTX 3090 pytorch1.8.1
- 图论学习笔记——一笔画(最少笔画)问题
- 微信小程序---轮播图
- 简单有趣,半小时漫画中国史
- 已解决使用Python分割图片
- 低通滤波器转带通滤波器公式由来_高手讲解滤波器原理(二),轻松搞定LC滤波器原理...
- 【Unity】11.3 基本碰撞体(箱体、球形、胶囊、网格)
热门文章
- NVIDIA官方指南:libav编译支持Nvidia Codec(结果失败)
- 编译好的编译ffmpeg又出错:更改输出目录产生各种古怪错误
- 编译libpng出错:pnglibconf.c fatal error: zlib.h 没有那个文件或目录
- 移动终端的应用杀掉进程后,接收消息启动应用的简要技术说明
- LINUX上开发ffmpeg程序,查看链接的库
- 管理感悟:当领导就要敢于,及时做出决策
- android实现1000次点击,android – AdMob收入和替代方案:展示次数和点击次数[已关闭]...
- linux 查看进程与端口以及内存资源
- HTML弹窗上下一步,JS实现从网页顶部掉下弹出层效果的方法
- 计算机的创新产品,这几种电脑创新功能 空有喝彩没人买