题目背景

给一组 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。

 #include <iostream>
#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <string.h> using namespace std; const int MAXN = ;
int a, n, k, f[MAXN]; int main()
{
cin >> k >> n;
for ( int i = ; i < MAXN; i++ )
{
f[i] = ;
}
f[] = ;
for ( int i = ; i <= n; i++ )
{
cin >> a;
for ( int j = a; j <= MAXN; j++ )
{
if ( f[j - a] + <= k ) /* 用的邮票数目在范围内 */
{
f[j] = min( f[j], f[j - a] + );
}
}
}
for ( int i = ; i < MAXN; i++ )
{
if ( f[i] == )
{
cout << i - << endl;
break;
}
}
return();
}

洛谷 P2725 邮票题解的更多相关文章

  1. 【题解】洛谷 P2725 邮票 Stamps

    目录 题目 思路 \(Code\) 题目 P2725 邮票 Stamps 思路 \(\texttt{dp}\).\(\texttt{dp[i]}\)表示拼出邮资\(i\)最少需要几张邮票. 状态转移方 ...

  2. 洛谷P2725 邮票 Stamps

    P2725 邮票 Stamps 37通过 224提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 为什么RE?在codevs上AC的. 题目背景 给一组 ...

  3. 洛谷 P2725 邮票 Stamps 解题报告

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

  4. 洛谷 P2725 邮票 Stamps Label:DP

    题目背景 给一组 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K —— 表示信封上能够贴 K 张邮票.计算从 1 到 M 的最大连续可贴出的邮资. 题目描述 例如,假设有 1 分和 3 ...

  5. 洛谷 P2725 邮票 Stamps

    题目传送门 解题思路: f[i]表示凑总面值i所需的最少邮票张数,然后快乐的跑完全背包. AC代码: #include<iostream> #include<cstdio> # ...

  6. 洛谷NOIp热身赛题解

    洛谷NOIp热身赛题解 A 最大差值 简单树状数组,维护区间和.区间平方和,方差按照给的公式算就行了 #include<bits/stdc++.h> #define il inline # ...

  7. 洛谷P2827 蚯蚓 题解

    洛谷P2827 蚯蚓 题解 题目描述 本题中,我们将用符号 ⌊c⌋ 表示对 c 向下取整. 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓. 蛐蛐国里现 ...

  8. 洛谷P1816 忠诚 题解

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

  9. [POI 2008&洛谷P3467]PLA-Postering 题解(单调栈)

    [POI 2008&洛谷P3467]PLA-Postering Description Byteburg市东边的建筑都是以旧结构形式建造的:建筑互相紧挨着,之间没有空间.它们共同形成了一条长长 ...

随机推荐

  1. socks5 代理服务器ss5配置

    安装 yum install pam-devel openldap-devel openssl-devel yum -y install gcc automake make pam-devel ope ...

  2. Android Studio 开发

    Android studio安装与配置 (收藏) https://www.cnblogs.com/gufengchen/p/10991886.html ------------------------ ...

  3. [bug]—console 在某些机型下的隐藏坑

    背景 我们的项目通过重写console对象上的方法实现日志上报的功能,截取代码片段如下: Class Logger() { debug() {}, info() {}, warn() {}, ... ...

  4. Java的集合类之Set接口

    Set最大的特性就是不允许在其中存放的元素是重复的.根据这个特点,我们就可以使用Set 这个接口来实现前面提到的关于商品种类的存储需求.Set 可以被用来过滤在其他集合中存放的元素,从而得到一个没有包 ...

  5. 将笔记本无线网卡链接wifi通过有线网卡共享给路由器

    1.背景 背景这个就说来长了,在公司宿舍住着,只给了一个账号,每次登录网页都特别麻烦(需要账号认证那种).然后每个账号只支持一个设备在线,这就很尴尬了,那我笔记本.手机.Ipad怎么办? 当然,这时候 ...

  6. c++中共享内存原理及实现

    共享内存 (也叫内存映射文件) 主要是通过映射机制实现的 , Windows 下进程的地址空间在逻辑上是相互隔离的 , 但在物理上却是重叠的 ; 所谓的重叠是指同一块内存区域可能被多个进程同时使用 , ...

  7. 推荐一款好用的json导出execl格式的文件的js工具-JsonExportExcel

    <html> <head> <meta charset="utf-8"> <title>json导出Excel</title& ...

  8. [转帖]在VirtualBox Linux 7u2 中安装Oracle RAC 12.2.0.1.0

    https://xiaoyu.blog.csdn.net/article/details/81980936

  9. C++ Primer 第五版示例gcc源码

    官方资源,原封不动的.对应于GCC,因此文件名是以此命名的. 门牌号: https://github.com/ZeroPhong/Learning-Resource/blob/master/GCC_4 ...

  10. Go MongoDB官方数据库驱动之增删改查

    package main import ( "context" "fmt" "log" "go.mongodb.org/mongo ...