USACO 邮票 Stamps
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的更多相关文章
- 洛谷P2725 邮票 Stamps
P2725 邮票 Stamps 37通过 224提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 为什么RE?在codevs上AC的. 题目背景 给一组 ...
- 洛谷 P2725 邮票 Stamps 解题报告
P2725 邮票 Stamps 题目背景 给一组 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K -- 表示信封上能够贴 K 张邮票.计算从 1 到 M 的最大连续可贴出的邮资. 题目描 ...
- 【题解】洛谷 P2725 邮票 Stamps
目录 题目 思路 \(Code\) 题目 P2725 邮票 Stamps 思路 \(\texttt{dp}\).\(\texttt{dp[i]}\)表示拼出邮资\(i\)最少需要几张邮票. 状态转移方 ...
- 洛谷 P2725 邮票 Stamps Label:DP
题目背景 给一组 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K —— 表示信封上能够贴 K 张邮票.计算从 1 到 M 的最大连续可贴出的邮资. 题目描述 例如,假设有 1 分和 3 ...
- 【洛谷】P2725 邮票 Stamps(dp)
题目背景 给一组 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K —— 表示信封上能够贴 K 张邮票.计算从 1 到 M 的最大连续可贴出的邮资. 题目描述 例如,假设有 1 分和 3 ...
- P2725 邮票 Stamps(完全背包+限制填充数)
题目链接:https://www.luogu.org/problem/show?pid=2725 题目大意:给一组 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K —— 表示信封上能够贴 ...
- 洛谷 P2725 邮票 Stamps
题目传送门 解题思路: f[i]表示凑总面值i所需的最少邮票张数,然后快乐的跑完全背包. AC代码: #include<iostream> #include<cstdio> # ...
- USACO Stamps
洛谷 P2725 邮票 Stamps https://www.luogu.org/problem/P2725 JDOJ 1797: Stamps 邮票 https://neooj.com:8082/o ...
- codevs 2033 邮票
洛谷 P2725 邮票 Stamps codevs 2033 邮票 题目链接 http://codevs.cn/problem/2033/ https://www.luogu.org/problemn ...
随机推荐
- 循环队列和链式队列(C++实现)
循环队列: 1.循环队列中判断队空的方法是判断front==rear,队满的方法是判断front=(rear+1)%maxSize.(我曾经想过为什么不用一个length表示队长,当length==m ...
- windows 双网卡同时上专网(内网)和外网
本操作是用网线做专网(内网),无线网卡用于外网 1. 记录有线网卡的网络的网关,例如10.103.14.1 2. 有线网卡必须是手动指定的ip地址,把网关清掉,例如 3. 删除0.0.0.0 路由 r ...
- BZOJ 5093[Lydsy1711月赛]图的价值 线性做法
博主曾更过一篇复杂度为$O( k· \log k)$的多项式做法在这里 惊闻本题有$ O(k)$的神仙做法,说起神仙我就想起了于是就去学习了一波 幂与第二类斯特林数 推导看这里 $$ x^k=\sum ...
- Learning Feature Pyramids for Human Pose Estimation(理解)
0 - 背景 人体姿态识别是计算机视觉的基础的具有挑战性的任务,其中对于身体部位的尺度变化性是存在的一个显著挑战.虽然金字塔方法广泛应用于解决此类问题,但该方法还是没有很好的被探索,我们设计了一个Py ...
- 20165221 《网络对抗技术》EXP1 PC平台逆向破解
20165221 <网络对抗技术>EXP1 PC平台逆向破解 一.实验内容 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...
- 最新传智播客web前端开发39期视频教程【完整版】
本套视频为传智2018web前端开发全套视频教程基础班+就业班,视频+源码+案例笔记,全套高清不加密~2018最新传智播客视频! 本教程是实战派课程!为传智最新web前端39期,挑战全网最全视频,没有 ...
- 【原创】大数据基础之Logstash(5)监控
有两种方式来监控logstash: api ui(xpack) When you run Logstash, it automatically captures runtime metrics tha ...
- Jquery验证码倒计时
html代码: <input type="button" value="获取验证码" id="getCode" style=" ...
- IntelliJ IDEA设置svn.exe的路径
安装TortoiseSVN客户端时,必须选中command line client tools这个选项
- docker启动,重启,停止容器
docker 启动已经停止的容器 docker start 容器ID或容器名 docker 停止容器 docker stop 容器ID或容器名 docker 启动一个容器 -d:后台运行 -p:端口映 ...