题目背景

给一组 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K —— 表示信封上能够贴 K 张邮票。计算从 1 到 M 的最大连续可贴出的邮资。

题目描述

例如,假设有 1 分和 3 分的邮票;你最多可以贴 5 张邮票。很容易贴出 1 到 5 分的邮资(用 1 分邮票贴就行了),接下来的邮资也不难:

6 = 3 + 3
7 = 3 + 3 + 1
8 = 3 + 3 + 1 + 1
9 = 3 + 3 + 3
10 = 3 + 3 + 3 + 1
11 = 3 + 3 + 3 + 1 + 1
12 = 3 + 3 + 3 + 3
13 = 3 + 3 + 3 + 3 + 1

然而,使用 5 枚 1 分或者 3 分的邮票根本不可能贴出 14 分的邮资。因此,对于这两种邮票的集合和上限 K=5,答案是 M=13。 [规模最大的一个点的时限是3s]

小提示:因为14贴不出来,所以最高上限是13而不是15

输入格式

第 1 行: 两个整数,K 和 N。K(1 <= K <= 200)是可用的邮票总数。N(1 <= N <= 50)是邮票面值的数量。

第 2 行 .. 文件末: N 个整数,每行 15 个,列出所有的 N 个邮票的面值,每张邮票的面值不超过 10000。

输出格式

第 1 行:一个整数,从 1 分开始连续的可用集合中不多于 K 张邮票贴出的邮资数。

输入输出样例

输入 #1复制

5 2
1 3

输出 #1复制

13

说明/提示

题目翻译来自NOCOW。

USACO Training Section 3.1


题解

这题虽然也是完全背包问题,但是比总分那题难想。直接选择题目所求作为f[i]是不行的。f[i]为要达成i面值所需要的最少邮票个数。这样状态转移方程就是:f[j] = min( f[j], f[j - a] + 1 );,也就是如果选择面值为a可以减少张数就选择a,否则不选a。

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <math.h>
 4 #include <algorithm>
 5 #include <string.h>
 6
 7 using namespace std;
 8
 9 const int    MAXN = 2000005;
10 int        a, n, k, f[MAXN];
11
12 int main()
13 {
14     cin >> k >> n;
15     for ( int i = 0; i < MAXN; i++ )
16     {
17         f[i] = 1111111;
18     }
19     f[0] = 0;
20     for ( int i = 1; i <= n; i++ )
21     {
22         cin >> a;
23         for ( int j = a; j <= MAXN; j++ )
24         {
25             if ( f[j - a] + 1 <= k ) /* 用的邮票数目在范围内 */
26             {
27                 f[j] = min( f[j], f[j - a] + 1 );
28             }
29         }
30     }
31     for ( int i = 1; i < MAXN; i++ )
32     {
33         if ( f[i] == 1111111 )
34         {
35             cout << i - 1 << endl;
36             break;
37         }
38     }
39     return(0);
40 }

转载于:https://www.cnblogs.com/zealsoft/p/11440455.html

洛谷 P2725 邮票题解相关推荐

  1. 洛谷P1816 忠诚 题解

    洛谷P1816 忠诚 题解 题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人 ...

  2. 线性存储的最短平均检索时间(洛谷P1253题题解,Java语言描述)

    题目要求 P1253题目链接 分析 很像 ~洛谷P1223题题解~,也是一种类似SJF的贪心法. 排个序,由于两个不大于10000的数,乘起来还是int,就使用int属性吧. 数据量小,所以Scann ...

  3. 队列模拟约瑟夫问题(洛谷P1996题题解,Java语言描述)

    题目要求 P1996题目链接 分析 以前就研究过"约瑟夫环"问题: <单循环链表求解约瑟夫环问题(Java语言描述)> <杀人游戏~约瑟夫环(洛谷P1145题题解 ...

  4. 洛谷P2108学英语题解

    来我的博客里拥有更好的阅读体验:https://yyxi.ml/2020/07/23/luogu-p2108-xueyingyu/ 洛谷P2108学英语题解(c++) 题目描述 代码.思路 踩过的坑 ...

  5. 洛谷 P1077 摆花 题解

    洛谷 P1077 摆花 题解 洛谷 P1077 题目 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共mmm盆.通过调查顾客的喜好,小明列出了顾客最喜欢的nnn种花,从1到nnn标号.为 ...

  6. 修改数组(洛谷P7285题题解,C++语言描述)

    题目要求 P7285题目链接 分析 这题虽然是红题,但是因为很有趣且是 Special Judge ,所以写篇题解. 乍一看,这题好麻烦啊,要综合考虑xxx和yyy,达到x−yx-yx−y的最优化. ...

  7. 枚举求解单词方阵(洛谷P1101题题解,Java语言描述)

    题目要求 P1101题目链接 分析 可以用DFS做,但我立下了个Flag,所以就用了朴素的枚举来做.... 结果,我的天哪,做了好几个小时-- 其实这种地图题,真的适合 DFS or BFS or D ...

  8. 快速幂||取余运算【模板】(洛谷P1226题题解,Java语言描述)

    题目要求 P1226题目链接 分析 标准的快速幂取模算法板子,之前这个算法我在这篇文章中讲过了:<快速幂算法详解&&快速幂取模算法详解>. 这里选择使用比较简单的API实现 ...

  9. 贪心策略摘果子(洛谷P1478题题解,Java语言描述)

    题目要求 P1478题目链接 分析 本题的低配版题目链接 → 题解 那个题就是纯水题没啥可写的,我除了贴代码无话可说,但这题吧,虽然不算难,但也可一说. 建议大家移步这里 → 精辟题解 这位爷写了本题 ...

最新文章

  1. document 获得元素节点,属性节点,文本节点。
  2. 含类定义的完整python程序_Python——变量,运算,条件,循环
  3. usb连接不上 艾德克斯电源_艾德克斯双范围可编程直流电源IT6800A/B系列
  4. 写通俗易懂代码-用卫语句替代嵌套条件表达式
  5. SVN太旧,要更新问题
  6. http://www.cnblogs.com/ITtangtang/archive/2012/05/21/2511749.html
  7. 在群晖Docker上搭建自己项目管理工具Focalboard
  8. HTML做表格——个人简历
  9. 面试阿里被问的哑口无言,原来我……
  10. excel手机版_这些Excel恢复神器,据说个个都很强,你用过吗?网友:很实用
  11. 研发里那只看不见的手,勒的很疼
  12. 计算机毕业设计SSM 家乡旅游文化推广网站【附源码数据库】
  13. vue路由——基础篇(二)
  14. ROS12机器人操作系统免安装在线自主学习平台简介和官方第三方教程列表
  15. C语言不完全类型是什么?有什么用途?
  16. 计算机毕业生工作收入调查,大学毕业生收入调查:最高薪的工作是它
  17. 为hexo添加hexo-admin组件
  18. 权威指南:超融合基础参考架构(Nutanix)
  19. 计算机音乐单恋一枝花,单恋一枝花-张宇
  20. AI域名与建站完全指南

热门文章

  1. 父子结构查询_Java面试准备(5)之数据结构与算法——红黑树
  2. nginx php大文件上传,Nginx+PHP上传大文件设置
  3. em算法怎么对应原有分类_机器学习基础-EM算法
  4. python云计算主要是干嘛的_国内python 云计算是干什么的
  5. echart 高度 不用 不撑满_注意厨房台面高度及细节 装出省心舒服 装出事半功倍...
  6. mysql mysqldumpslow_慢日志分析工具—mysqldumpslow 和 mysqlsla
  7. Java面典_【Java实用工具】——使用oshi获取主机信息
  8. react封装函数_react request.js 函数封装
  9. 2014北科计算机原理试题答案,北科_计算机组成原理考题-A卷答案
  10. java velocity 邮件_邮件集成java mail + 读取邮件模板