f[x]表示组成 x 最少需要的邮票数量

一一举例

最多贴5张邮票,有三种邮票可用,分别是1分,3分,8分

组成0分需要0张邮票 ——f[0]=0

组成1分需要在0分的基础上加上一张1分邮票 ——f[1]= f[0]+1 =1 (单位:张)

组成2分需要在1分的基础上加上一张1分邮票 ——f[2]= f[1]+1 =2

组成3分需要 min{在2分的基础上加上一张1分邮票,在0分的基础上加上一张3分邮票} ——f[3]=min{ f[2]+1 , f[0]+1 } = min{ 3 , 1} = 1

组成4分需要在3分的基础上加上一张1分邮票 ——f[4]= f[3]+1 =2

…… 组成7分需要在6分的基础上加上一张1分邮票 ——f[7]= f[6]+1 =3

组成8分需要 min{在7分的基础上加上一张1分邮票,在0分的基础上加上一张8分邮票} ——f[8]=min{ f[7]+1 , f[8 - 8]+1 }=1

……

继续推下去的话就会发现规律

当 x 到达一定邮票面值时就会化简

状态转移方程则为

f[i] = min{ f[i-1]+1 , f[i-a[j]]+1 }

代码参考:

 type
tlist=array[..] of longint;
var
n,k,i,j:longint;
a,f:array[..] of longint;
function min(a,b:longint):longint;
begin
if a<b then exit(a);
exit(b);
end;
procedure qsort(var a : tlist);
procedure sort(l,r: longint);
var
i,j,x,y: longint;
begin
i:=l;
j:=r;
x:=a[(l+r) div ];
repeat
while a[i]<x do
inc(i);
while x<a[j] do
dec(j);
if not(i>j) then
begin
y:=a[i];
a[i]:=a[j];
a[j]:=y;
inc(i);
dec(j);
end;
until i>j;
if l<j then
sort(l,j);
if i<r then
sort(i,r);
end;
begin
sort(,k);
end;
begin
assign(input,'stamps.in');
assign(output,'stamps.out');
reset(input);
rewrite(output);
readln(n,k);
for i:= to k do
read(a[i]);
qsort(a); //快排
f[]:=;
for i:= to do //可用邮票总数 * 邮票最大面值
begin //温馨提示pascal别用while循环
f[i]:=maxlongint;
for j:= to k do
if i>=a[j] then
if f[i]>f[i-a[j]]+ then f[i]:=f[i-a[j]]+;
if f[i]>n then break; //当使用的邮票数量大于n时退出循环
end;
writeln(i-); //退出时f[i]大于n,故 -1
close(input);
close(output);
end.

USACO 邮票 Stamps的更多相关文章

  1. 洛谷P2725 邮票 Stamps

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

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

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

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

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

  4. 洛谷 P2725 邮票 Stamps Label:DP

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

  5. 【洛谷】P2725 邮票 Stamps(dp)

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

  6. P2725 邮票 Stamps(完全背包+限制填充数)

    题目链接:https://www.luogu.org/problem/show?pid=2725 题目大意:给一组 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K —— 表示信封上能够贴 ...

  7. 洛谷 P2725 邮票 Stamps

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

  8. USACO Stamps

    洛谷 P2725 邮票 Stamps https://www.luogu.org/problem/P2725 JDOJ 1797: Stamps 邮票 https://neooj.com:8082/o ...

  9. codevs 2033 邮票

    洛谷 P2725 邮票 Stamps codevs 2033 邮票 题目链接 http://codevs.cn/problem/2033/ https://www.luogu.org/problemn ...

随机推荐

  1. python3 练手实例7 斐波那契数列

    '''a,b=0,1 x=int(input('请指定需要多少项:')) while x>0: print(b) a,b=b,a+b x-=1''' #递归 def fibo(n): if n& ...

  2. springboot 共享session

    1.pom添加jar依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifact ...

  3. Scrapy+Scrapy-redis+Scrapyd+Gerapy 分布式爬虫框架整合

    简介:给正在学习的小伙伴们分享一下自己的感悟,如有理解不正确的地方,望指出,感谢~ 首先介绍一下这个标题吧~ 1. Scrapy:是一个基于Twisted的异步IO框架,有了这个框架,我们就不需要等待 ...

  4. L1-Day11

    1.问问他能不能来.[我的翻译]Ask him wether he can come.[标准答案]Ask him whether/if he can come.[对比分析]天呐 whether都能拼写 ...

  5. SpringMVC使用CommonsMultipartResolver上传文件

    DispatcherServlet并没有实现任何解析multipart请求数据的功能,它将该任务委托给了Spring中MultipartResolver策略接口的实现,通过该接口的实现类来解析mult ...

  6. 深度探索C++对象模型

    深度探索C++对象模型 什么是C++对象模型: 语言中直接支持面向对象程序设计的部分. 对于各个支持的底层实现机制. 抽象性与实际性之间找出平衡点, 需要知识, 经验以及许多思考. 导读 这本书是C+ ...

  7. expect 批量自动部署ssh 免密登陆 之 三

    #!/bin/expect -- ########################################## zhichao.hu #Push the id.pas.pub public k ...

  8. 【easy】268. Missing Number

    Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ...

  9. Windows 10无法连接远程桌面解决办法(这可能是由于CredSSP加密Oracle修正)

    问题描述: 使用windows10 连接远程桌面时出现如下错误: 出现身份验证错误. 要求的函数不受支持. 这可能是由于CredSSP加密Oracle修正. 若要了解详细信息,请访问https://g ...

  10. nginx实现https的配置文件

    server { listen ; server_name testplatform.itegou.com; proxy_set_header X-Forwarded-Host $host; prox ...