C++动态规划DP Dynamic Programming实现B3635 硬币问题B3636 文字工作

news2025/1/19 6:51:06

DP动态规划的基本手段及如何解决问题

1. 那带一个问题,只要解决几个对应的小一点规模的问题就能得到问题本身的解

2. 设计一张表格,每一个格子都是一个问题的解

3. 一步步完成这张表格,根据一个数据,往表格前面的数据查找

4. 获得问题本身的答案

B3635 硬币问题

题面

题目描述

今有面值为 1、5、11 元的硬币各无限枚。

想要凑出 n 元,问需要的最少硬币数量。

输入格式

仅一行,一个正整数 n。

输出格式

仅一行,一个正整数,表示需要的硬币个数。

输入输出样例

输入 #1

15

输出 #1

3

输入 #2

12

输出 #2

2

说明/提示

样例解释

对于样例数据 1,最佳方案是 15=5+5+5,使用到 3 枚硬币。

对于样例数据 2,最佳方案是 12=11+1,使用到 2 枚硬币。

题解

根据题目中的解释,使用贪心或者暴力的方法是肯定写不出正解的。因此模拟一下如果需要凑15枚硬币,那么如果第一次选择

面值为1枚的硬币:还需要凑14枚

面值为5枚的硬币:还需要凑10枚

面值为11枚的硬币:还需要凑4枚

可推算出递推公式,只要计算出当前i的三个面值选项中的min,需要的最小硬币树,继续递归,不断更新f[i]直到i递归到n。

递推公式:

f(n) = min(f(n-1) + 1, f(n-5)+1,f(n-11)+1)

需要注意的是当考虑面值为5或11是需要判断当前需要的硬币是否大于5或11,否则会越界并且不能使用对应面值的硬币。

这就是一个减小规模的过程,就成为动态规划,用一些小的问题解决一个大的问题

代码

#include<iostream>
using namespace std;
int f[10000010]; // 定义 f 数组 
int main() {
    int n;
    cin >> n;

    for(int i = 1; i <= n; i++) {
        f[i] = f[i-1] + 1;  // i-1 元的方案数,外加一枚 1 元。

        if(i>=5) // 考察 i-5 元外加一枚 5 元是否更优
            f[i] = min(f[i], f[i-5]+1); 
        
        if(i>=11) // 考察 i-11 元外加一枚 11 元是否更优
            f[i] = min(f[i],f[i-11]+1);
    }

    cout << f[n] << endl; // 输出答案,n 元最少几枚

    return 0;
}

B3636 文字工作

题面

题目描述

机器猫要在电脑前打字。一共需要打 n 个字,但现在文档里只有一个字。

机器猫有两种操作可以做。假设现在已经有 x 个字,机器猫可以选择:

  • 往文档最后加一个字。字数变成 x+1。
  • 把文档复制粘贴一遍。字数变成 2x。

问机器猫至少需要多少次操作,才能得到恰好 n 个字。

输入格式

仅一行,一个正整数 n。

输出格式

仅一行,一个正整数,表示最少操作次数。

输入输出样例

输入 #1

16

输出 #1

4

输入 #2

5

输出 #2

3

说明/提示

样例解释

样例数据1,1→2→4→8→16,共 4 步。

样例数据2,1→2→4→5,共 3 步。

题解

代码

#include <bits/stdc++.h>
using namespace std;

int f[1000005];

int main() {
    int n;
    cin >> n;

    for(int i=2; i<=n; i++) {
        f[i] = f[i-1] + 1; // 方案 1

        if(i%2==0)  // 如果它可能是方案 2
            f[i] = min(f[i], f[i/2] + 1); // 方案 2
    }

    cout << f[n] << endl;

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/926000.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

APT80DQ40BG-ASEMI低功耗半导体APT80DQ40BG

编辑&#xff1a;ll APT80DQ40BG-ASEMI低功耗半导体APT80DQ40BG 型号&#xff1a;APT80DQ40BG 品牌&#xff1a;ASEMI 封装&#xff1a;TO-3P 恢复时间&#xff1a;&#xff1e;50ns 正向电流&#xff1a;80A 反向耐压&#xff1a;400V 芯片个数&#xff1a;2 引脚数量…

java八股文面试[JVM]——类加载器

一、类加载器的概念 类加载器是Java虚拟机用于加载类文件的一种机制。在Java中&#xff0c;每个类都由类加载器加载&#xff0c;并在运行时被创建为一个Class对象。类加载器负责从文件系统、网络或其他来源中加载类的字节码&#xff0c;并将其转换为可执行的Java对象。类加载器…

Kaniko在containerd中无特权快速构建并推送容器镜像

目录 一、kaniko是什么 二、kaniko工作原理 三、kanijo工作在Containerd上 基于serverless的考虑&#xff0c;我们选择了kaniko作为镜像打包工具&#xff0c;它是google提供了一种不需要特权就可以构建的docker镜像构建工具。 一、kaniko是什么 kaniko 是一种在容器或 Kube…

机器学习基础11-算法比较(基于印第安糖尿病Pima Indians 数据集)

比较不同算法的准确度&#xff0c;选择合适的算法&#xff0c;在处理机器学习的问题时是非常重要的。本节将介绍一种模式&#xff0c;在scikit-learn中可以利用它比较不同的算法&#xff0c;并选择合适的算法。你可以将这种模式作为自己的模板&#xff0c;来处理机器学习的问题…

如何备份系统?很简单,2个方法教会你!

在计算机使用过程中&#xff0c;系统故障、病毒攻击、意外损坏等问题可能导致数据丢失和系统无法正常运行。为了保障数据安全和系统稳定&#xff0c;如何备份系统是至关重要的。本文将介绍备份系统的2个方法&#xff0c;帮助用户轻松备份系统&#xff0c;确保数据的安全和系统的…

什么是网络中的服务质量 (QoS),其相关技术和关键指标有哪些?

QoS&#xff08;Quality of Service&#xff0c;服务质量&#xff09;指一个网络能够利用各种基础技术&#xff0c;为指定的网络通信提供更好的服务能力&#xff0c;是网络的一种安全机制&#xff0c;是用来解决网络延迟和阻塞等问题的一种技术。QoS的保证对于容量有限的网络来…

MES管理系统解决方案,助力汽配企业打造透明化管理

随着汽车行业的不断发展&#xff0c;汽配行业面临着越来越严格的质量要求和生产效率提升挑战。为了满足这些需求&#xff0c;汽配企业需要实现生产过程的透明化和精细化。MES管理系统解决方案作为生产过程的核心管理系统&#xff0c;可以为汽配企业提供全面的解决方案&#xff…

ubuntu22.04安装搜狗输入法后始终无法输入中文

这次真的整我很久很久&#xff0c;我都不想用搜狗输入法了&#xff0c;结果无意间还是被我解决了。 ubuntu22.04安装搜狗输入法的步骤参考官网给的文档就行&#xff0c;这里我只说我的为啥输入不了中文 点击Fcitx配置 把搜狗输入法个人版放在第一位就行(我的系统语言是中文&am…

思维导图的作用有哪些?了解一下这几个作用

思维导图的作用有哪些&#xff1f;思维导图是一种以图形和颜色为主要表现形式的思维工具&#xff0c;它可以帮助人们更好地组织和表达思想。它的作用有很多&#xff0c;下面就给大家简单介绍一下。 1、帮助记忆 思维导图可以将大量信息整合到一个图形中&#xff0c;这有助于人…

一次由摔碎手机屏幕导致的急速搬家

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦midjourney 产品统筹 / bobo 想问问大家&#xff0c;都在什么情况下搬过家&#xff1f; 有的时候搬家是迫不得已&#xff0c;房东突然发难&#xff1b; 有的时候搬…

MyBatis分页插件PageHelper的使用及MyBatis的特殊符号---详细介绍

一&#xff0c;分页的概念 分页是一种将大量数据或内容分割成多个页面以便逐页显示的方式。在分页中&#xff0c;数据被分割成一定数量的页&#xff0c;每页显示一部分数据或内容&#xff0c;用户可以通过翻页或跳分页是一种将大量数据或内容分割成多个页面以便逐页显示的方式。…

深入浅出 RPC框架

RPC 框架分层设计 01 基本概念 1.1 本地函数调用 以上步骤只是为了说明原理。事实上编译器经常会做优化&#xff0c;对于参数和返回值少的情况会直接将其存放在寄存器&#xff0c;而不需要压栈弹栈的过程&#xff0c;甚至都不需要调用call&#xff0c;而直接做inline操作 1.2 远…

Forrester首次面向中国的开源报告:阿里云在云原生领域开源布局最全面

Forrester 于近期发布了《Navigate The Cloud-Native Ecosystem In China, 2023》&#xff0c;报告概述了中国云原生领域的开源项目对构建云原生生态的促进作用&#xff0c;这些开源项目正深刻影响着企业的技术决策者以何种策略拥抱云原生这一现代 IT 基础设施的核心。 报告表…

SMC状态机 讲解2 从模型到SMC

SMC状态机 讲解2 从模型到SMC 1、实例化有限状态机&#xff08;FSM)2、简单转换 Simple Transition3、外部环回转换 External Loopback Transition4、内部环回转换 Internal Loopback Transition5、转换动作6、转换Guard7、转换参数8、Entry 和 Exit动作9、Push 转换10、Pop转换…

AI加持,创意设计效率百倍提升,探秘背后的数字化魔法

在当今创新潮流不断涌现的时代&#xff0c;人工智能正以惊人的速度和深度赋能各行各业&#xff0c;食品包装设计界也已来到了一个“拼创意、拼二创和拼审美”的时代。有了AI的加入&#xff0c;设计界正迎来一股AI创意风暴&#xff0c;不仅颠覆了设计流程&#xff0c;更为食品包…

机器学习教程(非常详细)从零基础入门到精通,看完这一篇就够了

一、机器学习的定义 从广义上来说&#xff0c;机器学习是一种能够赋予机器学习的能力以此让它完成直接编程无法完成的功能的方法。但从实践的意义上来说&#xff0c;机器学习是一种通过利用数据&#xff0c;训练出模型&#xff0c;然后使用模型预测的一种方法。 “训练”与“…

在leangoo免费敏捷工具中如何批量设置成员权限

Leangoo领歌是一款永久免费的专业敏捷开发管理工具&#xff0c;提供端到端敏捷研发管理解决方案&#xff0c;涵盖敏捷需求管理、任务协同、进展跟踪、缺陷管理、统计度量等。 包括小型团队敏捷开发&#xff0c;规模化敏捷SAFe&#xff0c;Scrum of Scrums大规模敏捷。其功能/解…

java包的package-info.java文件

Java包的下面可以放一个package-info.java文件&#xff0c;在这个文件中声明包&#xff0c;在注释中增加包的介绍信息。这样javadoc工具就可以优先从这个文件中获取包的介绍信息。 例如Java工程&#xff0c;在包com.thb下面有package-info.java文件&#xff1a; package-inf…

优秀产品奖!移远5G RedCap模组,让5G真正“轻”下来

8月24日&#xff0c;在通信世界全媒体主办的“5G RedCap技术与物联网应用创新研讨会”上&#xff0c;“5G RedCap优秀产品和解决方案”获奖名单发布&#xff0c;移远通信5G RedCap模组Rx255C系列以其在创新性、实用性、经济性、成熟性等方面的综合领先优势&#xff0c;获此殊荣…

Spring Boot进阶(58):集成PostgreSQL数据库及实战使用 | 万字长文,超级详细

1. 前言&#x1f525; PostgreSQL是一种广泛使用的开源关系型数据库&#xff0c;具有可靠性高、性能优异、拥有丰富的数据类型和扩展等优点&#xff0c;越来越多的企业和开发者开始使用它来存储和管理数据。而Spring Boot是一种快速开发的框架&#xff0c;可以简化开发过程并提…