题目描述

有若干张邮票,要求从中选取最少的邮票张数凑成一个给定的总值。     如,有1分,3分,3分,3分,4分五张邮票,要求凑成10分,则使用3张邮票:3分、3分、4分即可。

输入描述:

    有多组数据,对于每组数据,首先是要求凑成的邮票总值M,M<100。然后是一个数N,N〈20,表示有N张邮票。接下来是N个正整数,分别表示这N张邮票的面值,且以升序排列。

输出描述:

      对于每组数据,能够凑成总值M的最少邮票张数。若无解,输出0。

示例1

输入

复制

10
5
1 3 3 3 4

输出

复制

3

思路:只要我们优先考虑面值大的邮票,那么凑出来的邮票数量就会尽可能小。

所以,先按面值对邮票从大到小排序,然后按照01背包来解决问题即可,把总值看作背包容量,把邮票的面值看作物品的重量与价值,如果dp[m]==m,则证明能凑出来

#include<iostream>
#include<stack>
#include<vector>
#include<map>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn=110;
int num[maxn][maxn];//记录状态[i][v]时候的邮票数量
int dp[maxn];
int tickers[maxn];//邮票面值bool cmp(int x,int y){return x>y;}
int main(){int m,n;while(cin>>m){cin>>n;for(int i=1;i<=n;i++)cin>>tickers[i];sort(tickers+1,tickers+1+n,cmp);memset(num,0,sizeof(num));memset(dp,0,sizeof(dp));for(int i=1;i<=n;i++){for(int v=m;v>=tickers[i];v--){if(dp[v] < dp[v-tickers[i]] + tickers[i]){dp[v] = dp[v-tickers[i]] + tickers[i];num[i][v]=num[i-1][v-tickers[i]]+1;}else{num[i][v]=num[i-1][v];}}}if(dp[m]==m){//能凑出来cout<<num[n][m]<<endl;}else{cout<<0<<endl;}}
}

最小邮票数(01背包)相关推荐

  1. 九度 1209:最小邮票数(多重背包)

    题目描述: 有若干张邮票,要求从中选取最少的邮票张数凑成一个给定的总值     如,有1分,3分,3分,3分,4分五张邮票,要求凑成10分,则使用3张邮票:3分.3分.4分即可 思路 1. 朴素背包问 ...

  2. 【nyoj-456】 邮票分你一半 (dp,0-1背包的中点问题)

    题干: 邮票分你一半 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 小珂最近收集了些邮票,他想把其中的一些给他的好朋友小明.每张邮票上都有分值,他们想把这些邮票分成两份 ...

  3. 2017百度之星程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】...

    度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...

  4. [01背包] 背包问题求具体方案(01背包+求方案数+思维)

    文章目录 0. 前言 1. 01背包+求方案数+思维 0. 前言 相关: [背包] 背包问题算法模板(模板) 1. 01背包+求方案数+思维 12. 背包问题求具体方案 求方案数也是背包问题.dp 的 ...

  5. 01背包,完全背包,多重背包,混合背包,二维费用背包,分组背包,背包问题求方案数

    1 01背包问题 有 NNN 件物品和一个容量是 VVV 的背包.每件物品只能使用 一次. 第 iii 件物品的体积是 viv_ivi​,价值是 wiw_iwi​.求解将哪些物品装入背包,可使这些物品 ...

  6. [01背包] 数字组合(01背包+求方案数)

    文章目录 0. 前言 1. 01背包求方案数 0. 前言 相关: [背包] 背包问题算法模板(模板) 1. 01背包求方案数 278. 数字组合 将 M 看作背包容量,每个数看成一个物品,Ai 看成是 ...

  7. qdu-凑数题(01背包)

    Description 小Q手里有n(n<=1000) 个硬币,每枚硬币有一定的金额(200=>x>=1)他想知道,用这些硬币(每枚硬币只能用一次,但可能会有等面值的用两次) 能组成 ...

  8. dp之01背包hdu3466(带限制的,当你所拥有的钱数大于某个限定值时才可以购买该物品)...

    题意:买东西,每个东西有三个特征值,p代表价格,q代表你手中钱必须不低于q才能买这个物品,v代表得到的价值. mark:又是变种01背包,每做一个变种的,就是一种提高.. 按照q - p以由大到小的顺 ...

  9. HDU 3466 01背包变形

    给出物品数量N和总钱数M 对于N个物品.每一个物品有其花费p[i], 特殊值q[i],价值v[i] q[i] 表示当手中剩余的钱数大于q[i]时,才干够买这个物品 首先对N个物品进行 q-p的排序,表 ...

最新文章

  1. Linux上用户执行命令记录
  2. 一步一步制作yaffs/yaffs2根文件系统(三)---使用glibc库构造 /lib
  3. postgresql查询栅格数据范围(extent)
  4. mysql+零时数据结构,MySql主要索引数据结构
  5. wxWidgets:wxHyperlinkEvent类用法
  6. svn增量打包部署_持续集成、持续交付、持续部署(CI/CD)简介
  7. python 制作抽奖箱_用Excel函数制作抽奖箱
  8. 如何系统的自学python-如何系统的学习python?
  9. C# 如何将Excel表格复制到Word中并保留格式
  10. oracle 怎么清空数据表,oracle怎么清空表数据,oracle清空数据库
  11. MYSQL启动失败,Can‘t create test file
  12. selenium自动化图片不加载设置
  13. 【JavaScript】鼠标、键盘的基础事件
  14. LQA: Time of day is written with a “dot” not a “colon” (13.14 not 13:14)
  15. 苹果xr十大隐藏功能_网上找的一些非常实用的苹果笔记本使用技巧及隐藏功能,收藏了...
  16. html中嵌套谷歌定位地图
  17. PAP和CHAP认证是什么
  18. 与门、或门、非门、与非门、或非门、异或门、同或门
  19. Java web 服务器 搭建_搭建一个java web服务端
  20. 黑马程序员 网络编程2

热门文章

  1. 《深度学习500问》,川大优秀毕业生的诚意之作
  2. “偷鸡”不成的马斯克,终于丢掉了自己的“王位”
  3. AI一分钟 | 小鹏汽车回应前苹果员工窃取商业机密:积极配合相关调查
  4. Spring Aop 常见注解和执行顺序
  5. Java 日志框架适配/冲突解决方案(值得收藏)
  6. Spring解析,加载及实例化Bean的顺序(零配置)
  7. ZooKeeper 源码和实践揭秘
  8. 讨论:Service层需要接口吗?
  9. 分布式锁用 Redis 还是 Zookeeper?
  10. 为什么不推荐使用存储过程?