邮票问题---动态规划

动态规划解邮票面值问题:完全背包与连续邮资算法详解 动态规划是解决组合优化问题的核心算法思想,尤其在处理‘能否凑出特定金额’这类可达性判断时,常被建模为完全背包问题。其原理是通过状态转移方程,如 dp[j] = min(dp[j], dp[j - stamp] + 1),高效计算使用无限量给定面值邮票凑出邮资的最少张数。该技术的价值在于将指数级复杂度的组合枚举转化为多项式时间求解,大幅提升计算效率。在算法竞赛和工程实践中,此类模型广泛应用于硬币找零、资源分配等场景。本文以‘邮票面值’问题为例,深入探讨如何利用动态规划求解最大连续邮资,并解析贪心算法在确定搜索 阅读详情

已知一个 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。

输入:

第 1 行: 两个整数,K 和 N。K(1 <= K <= 200)是可用的邮票总数。N(1 <= N <= 50)是邮票面值的数量。 
第 2 行至末尾: N 个整数,每行 15 个,列出所有的 N 个邮票的面值,面值不超过 10000。

输出:

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

样例输入:

5 2
1 3

样例输出:

13


分析:

1.数据分析:每个信封最多贴K(K<=200)张邮票,每张邮票的面值不超过10000,能贴出最大的邮资不超过2000000,可用一个数组来表示能够表示贴出每种邮资。


2.算法分析:

(1)搜索:每种邮票最多贴200张,总共50种,朴素的深搜规模将达到50^200。

(2)动态规划:

        <1>阶段:能够构成每个面值为阶段。比如能构成的面值为1到V,那么总共为V个阶段。

        <2>状态:dp[i]表示构成面值i所需要的最少邮票数.

        <3>决策:对于样例数据1和3两种面值的邮票:

                    构成邮资0:所需要邮票张数为0张,dp[0]=0;

                    构成邮资1:只能用1分的邮票,所需要邮票张数1张,dp[1]=1;

                    构成邮资2:只能用1分的邮票,所需要邮票张数2张,dp[2]=2;

                    构成邮资3:

                             *1.若选择使用一张1分的邮票,dp[3]=dp[2]+1=3………dp[3-1]+1

                             *2.若选择使用一张3分的邮票,dp[3]=dp[0]+1=1………dp[3-3]+1

                                       dp[3]=min{dp[2]+1,dp[0]+1}=1;

                     构成邮资4:

                             *1.若选择使用一张1分的邮票,dp[4]=dp[3]+1=2………dp[4-1]+1

                             *2.若选择使用一张3分的邮票,dp[4]=dp[1]+1=2………dp[4-3]+1

                                       dp[4]=min{dp[3]+1,dp[1]+1}=2;

        <4>状态转移方程:dp[i]=min{dp[i-a[j]]+1}    i>=a[j]  1<=j<=n    f[i]<=k;

#include <iostream>  
#include <algorithm>  
  
using namespace std;  
  
int Answer;  
int dp[2000001];  
  
int main(int argc, char** argv)  
{  
    int T, test_case;  
    
   
    cin >> T;  
    for (test_case = 0; test_case < T; test_case++)  
    {  
  
        Answer = 0;  
        int K = 0;  
        int N = 0;  
  
        cin >> K >> N;  
        int *a = new int[N+1];  
        for (int i = 0; i < N; i++)  
        {  
            cin >> a[i];  
        }  
  
        sort(a, (a + N));  
        dp[0] = 0;  
  
        while (dp[Answer] <= K)  
        {  
            Answer++;  
            dp[Answer] = 999999;  
            for (int j = 0; j < N && a[j] <= Answer; j++)  
            {  
                if (dp[Answer - a[j]] + 1 < dp[Answer])  
                    dp[Answer] = dp[Answer - a[j]] + 1;  
            }  
        }  
        cout << "Case #" << test_case + 1 << endl;  
        cout << Answer << endl;  
        delete[]a;  
    }  
  
    return 0;
}  

原作者写的内容有错误,解释的地方发生错误很难看得懂,所以纠正了一下。文章最下面是作者的原文链接;

转自 【算法】【动态规划】 邮票问题
掌握动态规划:背包问题与邮票问题的解决方案 本文探讨了动态规划算法在解决背包问题和邮票问题中的应用。通过一系列具体问题,如最少能量获得指定分数、邮票等值最小化问题和最大化问题,以及罐头食品数量最大化问题,我们展示了如何构建递推关系和归纳编程算法,以及如何使用这些算法来高效地找到问题的最优解。 阅读详情

相关推荐

2024.6.15丨基于VFDB数据库的致病菌毒力因子注释实战指南

本文提供了一份基于VFDB数据库进行致病菌毒力因子本地化注释的实战指南。详细介绍了从环境准备、DIAMOND工具安装、VFDB数据库选择与构建,到核心比对操作及结果解读与过滤的全流程。重点阐述了本地化分析相较于在线工具在速度、稳定性和批量处理上的优势,旨在帮助微生物基因组研究人员高效、精准地识别致病菌的关键毒力因子。

weixin_29220405的博客 272

P4550 收集邮票-洛谷luogu

传送门 题目描述 有n种不同的邮票,皮皮想收集所有种类的邮票。唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n。但是由于凡凡也很喜欢邮票,所以皮皮购买第k张邮票需要支付k元钱。现在皮皮手中没有邮票,皮皮想知道自己得到所有种类的邮票需要花费的钱数目的期望。 输入输出格式 输入格式: 一行,一个数字NN&...

weixin_30510153的博客 210

MCGS 昆仑通态触摸屏 modbus TCP 数据转发

MCGS触摸屏数据转发modbus TCP数据转发

m0_63451859的博客 2万+

邮票(DP或贪心)

/* http://www.acmore.net/problem.php?id=1084  邮票 已知一个 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K —— 表示信封上能够贴 K 张邮票。计算从 1 到 M 的最大连续可贴出的邮资。 例如,假设有 1 分和 3 分的邮票;你最多可以贴 5 张邮票。很容易贴出 1 到 5 分的邮资(用 1 分邮票贴就行了),接下来的邮资也不难

JHC23的专栏 1100

运维系列【仅供参考】: Windos10和Windos11 配置intel网卡vlan的方法

Windos10和Windos11 配置intel网卡vlan的方法

weixin_54626591的博客 477

ESP32设备驱动-AS5600磁性旋转位置传感器

AS5600 是一款可编程的 12 位高分辨率非接触式磁性旋转位置传感器。 AS5600可以作为磁性电位器或磁性编码器使用,具有出色的可靠性和耐用性。 与传统电位器/编码器相比,AS5600具有显着优势:高精度、非接触式、旋转角度无限制。 所有这些优点使其适用于非接触式角度测量应用,例如机器人手臂、云台、电机闭环控制、机床轴定位。

视觉与物联智能 2552

邮票问题

(一)   邮票问题(Problem Set 1746):1.    问题描述设有n种不同面值a1, a2,…, an的邮票,规定每封信最多贴m张邮票。对于给定的m,n,求出最大的邮资连续区间。例如,给定n=3,m=3,邮票面值分别为2, 3, 5,则最大的邮资连续区间为[2,13]。2.       具体要求Input输入的第一行是一个正整数n,表示测试例个数。接下来几行是n

wjw2586121的专栏 2421

如何使用 Claude Code 搜索 SAP note

当然,Claude Code 自己仍然要有一种合法可用的模型访问方式,例如 Claude 订阅、Anthropic API 或公司配置的模型提供方式,这和 Browser Extension 是两个问题。因为 Claude Code 已经是完整的 MCP Host,而 Microsoft Playwright MCP 又已经明确支持现有 Chrome Session,两者拼起来在技术架构上完全成立。Microsoft Playwright MCP 默认可以创建持久化浏览器 Profile。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 65

邮票问题(动态规划)

题目意思: 设有已知面额的邮票m种,每种有n张,用总数不超过n张的邮票,能从面额1开始,最多连续组成多少面额。(1≤m≤100,1≤n≤100,1≤邮票面额≤255) 输入 第一行:m,n的值,中间用一空格隔开。 第二行:A[1..m](面额),每个数中间用一空格隔开。 输出 连续面额数的最大值 样例输入Copy 3 4 1 2 4 样例输出Copy 14 代码: #include<stdio.h> #include<iostream> #...

Syclus的博客 2169

基于物联网技术设计的微型消防小车控制系统(STM32+ESP8266局域网)(181)

基于物联网技术的小微型消防车控制系统。通过远程控制功能,用户能够灵活操作消防车的行驶,方便快速抵达火灾现场。环境感知功能实时采集烟雾浓度、温湿度信息,为灭火决策提供科学依据。火源定位功能采用自动和手动两种模式,准确迅速地定位火源,并通过报警提示用户。灭火功能则根据火源定位结果,自动或手动启动干粉灭火器进行高效灭火。这些功能的结合实现了对小型火灾的全面应对,提升了消防效率与安全性,减少了火灾带来的损失。通过本项目的设计与实现,为消防领域提供了一种创新且实用的解决方案。

3081

XCP详解「3.1·ASAP2新建A2L文件」

后面是ASAP2新建A2L的操作步骤,如果是APE中新建的A2L就无需以下操作,APE只需要导入现成的A2L即可。退出点击保存时会提示保存A2L文件,是因为前面导出的是1.70版本,工程最低1.71,可以另外起个名字即可。导入elf文件,elf路径建议直接索引编译生成的Debug下的,防止编译后忘记更新。导出V1.70格式A2L文件,APE17支持V1.70。通过ASAP2生成需要A2L文件更常用些。同一个信号可以创建不同属性量。ASAP2中新建A2L文件。设置标定信号数量最大值。XCP详解「总目录」

光明磊学习&积累的地方 3061

BZOJ_P1426 收集邮票(概率+动态规划)

BZOJ传送门 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 202 Solved: 159 [Submit][Status][Discuss] Description 有n种不同的邮票,皮皮想收集所有种类的邮票。唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n。但是由于

BeiYu 720

基于NARX和NARX-LSTM的模型辨识与MPC控制系统调试与优化

本文针对两输入单输出非线性系统,提出基于NARX和NARX-LSTM的模型辨识与MPC控制优化方案。系统输入为固定量u1和可调量u2(8.5-140),输出目标为-0.58。现有模型存在辨识精度不足、历史输出依赖过重、预测偏差等问题。解决方案包括:数据差分处理改善非平稳性、调整延迟阶数优化模型结构、引入注意力机制替代手动加权、改进损失函数消除预测偏差。MPC控制器将结合优化模型,考虑控制变量步长约束(≥2),实现输出稳定控制。通过系统性的模型调试与控制算法优化,最终形成完整的非线性系统辨识与控制框架。

huanghm88的专栏 128

邮票问题-动态规划

邮票问题 【问题描述】       给定一个信封,最多只允许粘贴N(N张邮票,我们现在有m(m种邮票,面值分别为:x1,x2,…….xm分(xi为正整数),并假设各种邮票都有足够多张.        要求计算所能获得的邮资最大范围,即求最大值MAX,使在1—MAX之间的每一个邮资值都能得到.        例如:N=4,有2种邮票,面值分别为1分,4分,于是可以得到1----10分,和12

ly59782的博客 3596

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

动态规划解决最小邮票数问题

题目描述: 有若干张邮票,要求从中选取最少的邮票张数凑成一个给定的总值。 如,有1分,3分,3分,3分,4分五张邮票,要求凑成10分,则使用3张邮票:3分、3分、4分即可。 解题思路: 简单的自底向上动态规划解决问题,每次扫描一张邮票,在当前最优解的基础上得到加上这一枚邮票的最优解; 实现代码: #include<iostream> #include<vector> using namespace std; int main(){ int m,n; while

weixin_45103234的博客 446

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

由硬币问题和邮票问题看动态规划

由于实习时候被一个臭屁的老总(文科博士)

top_along的专栏 980

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【回溯法+动态规划】连续邮资问题——最佳邮票面值设计

想象你是邮票设计师,如何指定n种面值使得1张信封上贴m枚邮票能“连续”贴出最大区间?这就是《连续邮资问题》。它结合了回溯和DP思想,是算法训练的好素材!连续邮资问题是回溯+剪枝+动态规划结合体,适合进阶训练设计高效搜索算法,对算法竞赛与职位笔试很有帮助!

2301_79062072的博客 612

动态规划解邮票问题:从完全背包到最大连续邮资

动态规划是解决组合优化问题的核心算法思想,它通过将复杂问题分解为重叠子问题并存储中间结果,避免了重复计算,从而显著提升效率。其技术价值在于能够将指数级的时间复杂度优化为多项式级别,广泛应用于资源分配、路径规划、序列分析等场景。在算法面试与编程竞赛中,完全背包问题及其变体是考察动态规划掌握的经典题型。本文以邮票问题为例,深入探讨了如何将无限面值组合问题抽象为完全背包模型,并利用动态规划求解最大连续可组成邮资。通过分析状态定义、转移方程及上界确定等关键步骤,并结合代码实现与调试技巧,帮助读者巩固动态规划与背包问

328

【模板】动态规划之背包问题(01背包、多重背包、完全背包) (邮票、Piggy-bank题解)

DP求解核心:状态转移方程和边界条件。 最朴素的01背包问题 注意点: 1. 理解dp[][]的意义,表示前i种物品在重量为j时的最大价值。 2. 在选择放入物品时,注意对背包大小判断。 //二维数组 #include<iostream> #include<cstring> #include<algorithm> #define N 10...

coderwait 934

(4)邮票问题____动态规划

Stamps 邮票问题 题目描述:  已知一个 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K —— 表示信封上能够贴 K 张邮票。计算从 1 到 M 的最大连续可贴出的邮资。  例如,假设有 1 分和 3 分的邮票;你最多可以贴 5 张邮票。很容易贴出 1 到 5 分的邮资(用 1 分邮票贴就行了),接下来的邮资也不难:  6 = 3 + 3  7 = 3 + 3

YzlCoder的记事本 7119

【算法】【动态规划】 邮票问题

题目描述:  已知一个 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K —— 表示信封上能够贴 K 张邮票。计算从 1 到 M 的最大连续可贴出的邮资。  例如,假设有 1 分和 3 分的邮票;你最多可以贴 5 张邮票。很容易贴出 1 到 5 分的邮资(用 1 分邮票贴就行了),接下来的邮资也不难:  6 = 3 + 3  7 = 3 + 3 + 1  8 =

boywgw的专栏 3714

动态规划+深搜 解邮票面值设计问题

动态规划+深搜 解邮票面值设计问题 题目描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤15)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1至MAX之间的每一个邮资值都能得到。 例如,N=3,K=2,如果面值分别为1分、4分,则在1分~6分之间的每一个邮资值都能得到(当然还有8分、9分和12分);如果面值分别为1分、3分,则在1分~7分之间的每一个邮资值都能得到。可以验证当N=3,K=2时,7分就是可以得到的连续的邮资最大值,所以MAX=7,面值

qq_41117896的博客 758

最小邮票数

题目描述 有若干张邮票,要求从中选取最少的邮票张数凑成一个给定的总值。 如,有1分,3分,3分,3分,4分五张邮票,要求凑成10分,则使用3张邮票:3分、3分、4分即可。 输入描述: 有多组数据,对于每组数据,首先是要求凑成的邮票总值M,M&lt;100。然后是一个数N,N〈20,表示有N张邮票。接下来是N个正整数,分别表示这N张邮票的面值,且以升序排列。 输出描述: 对于...

weixin_38522681的博客 196

C语言邮票组合问题:从DFS递归到动态规划优化全解析

组合优化问题在算法面试和工程实践中处处可见,如何高效枚举所有可行解是核心挑战。以递归和回溯为基础的深度优先搜索(DFS)虽然直觉清晰,却常因组合数爆炸而卡死;动态规划通过“最少张数”状态合并同类路径,将复杂度从组合级降至线性级。文章以邮票组合问题为例,详解从DFS暴力枚举到动态规划优化的完整链路,并针对递归去重、数组越界、整数溢出等C语言典型陷阱给出定位方法。这类问题广泛存在于邮资计算、砝码称重、硬币找零等场景,理解状态设计与剪枝技巧,能帮助开发者举一反三。本文完整复盘调试过程,适合准备笔试、刷算法题或想精

weixin_30983353的博客 224

东华复试100 邮票

100 邮票 作者: Turbo时间限制: 1S章节: 动态规划 问题描述 : 已知一个 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 +

fxwentian的博客 352
上一篇: android聊天软件开发,实战篇(2)
下一篇: VS Code开启第一个VUE前端项目(1)
Batman_Encoding
博客等级 码龄10年 13粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值