动态规划学习1:669 · 换硬币

2023/12/1 18:32:18

有2元5元7元的硬币,要凑27元钱,求最少的硬币数目

动态规划题目特点

1.计数
——有多少种方式方式走到右下角
——有多少种方法选出k个数使得和是sum
2.求最值
——左上角走到右下角路径的最大数字和
——最长上升子序列长度
3.求存在性
——先手是否必胜
——能不能选出k个数使得和是sum

解题步骤

一.确定状态
●最后一步(最优策略中使用的最后一-枚硬币ak )
●化成子问题(最少的硬币拼出更小的面值27-ak )
二.转移方程
●f[X] = min{f[X- 2]+1, f[X-5]+1, f[X-7]+1}
三.初始条件和边界情况
●f[0] = 0,如果不能拼出Y , f[Y]=正无穷
四.计算顺序
●f[0], f[1], f[2],
确保方程中的的数是按顺序的
//递归版本

#include <bits/stdc++.h>
using namespace std;
int func(int coin){
    int amout = INT_MAX-1;
    if (coin == 0) return 0;
    if (coin >=2){
        amout = min(amout,func(coin - 2)+1);
    }
    if (coin >= 5){
        amout = min(amout,func(coin - 5)+1);
    }
    if (coin >= 7){
        amout = min(amout,func(coin - 7)+1);
    }
    return amout;
}
int main() {
    //递归版本
    cout << func(27);
    //动态规划版本
    int n = 0;
    cin >> n;
    int *amout = (int*)malloc((n+1)* sizeof(int));
    amout[0] = 0;
    for (int i = 1; i <=n; i++) {
        int m = INT_MAX-1;
        if (i-2>=0&&i-5<0){
            m = amout[i-2]+1;
        } else if(i-5 >=0&&i-7<0){
            m = min(amout[i-2]+1,amout[i-5]+1);
        } else{
            m = min(amout[i-2]+1,amout[i-5]+1);
            m = min(m,amout[i-7]+1);
        }
        amout[i] = m;
    }
    cout << amout[n] << endl;
    free(amout);
    return 0;
}

669 · 换硬币

描述

给出不同面额的硬币以及一个总金额. 写一个方法来计算给出的总金额可以换取的最少的硬币数量. 如果已有硬币的任意组合均无法与总金额面额相等, 那么返回 -1.

样例
样例1

输入:

[1, 2, 5]
11

输出: 3

解释: 11 = 5 + 5 + 1

样例2

输入:

[2]
3

输出: -1

样例3

输入:

[1, 9]
0

输出: 0

int coinChange(vector<int> &coin,int m){
    //初始情况和边界
    int *arr = new int[m+1];
    arr[0] = 0;
    int coin_length = coin.size();
    for (int i = 1; i <=m ; i++) {
        //边界
        arr[i] = INT_MAX;
        for (int j = 0; j < coin_length; j++) {
            //确定状态:f(x)min -> f(m-x)min
            if (i-coin[j]>=0&&arr[i-coin[j]]!=INT_MAX){
                //转移方程:f[x] = min(f[x-coin[0]],f[x-coin[1]],f[x-coin[2]])
                arr[i] = min(arr[i-coin[j]]+1,arr[i]);
            }
        }
        if (arr[m] == INT_MAX){
            arr[m] = -1;
        }
    }
    int num = arr[m];
    delete[] arr;
    return num;
}

动态规划的例题,
vetcor是比数组好用的容器
vector coin = {2,5,7};
这样定义,可以返回容器的长度,比数组好用


http://www.jnnr.cn/a/112423.html

相关文章

html5 -- canvas使用(1)

canvas 设置canvas标签 添加宽高 默认单位为px <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport&…

云原生之K8s—yaml文件

目录 一、K8S支持的文件格式 1、yaml和json的主要区别 二、YAML 2.1、查看API资源版本标签 2.2、编写资源配置清单 编写nginx-test.yaml资源配置清单 创建资源对象 查看创建的pod资源 创建资源对象 网页访问一下 K8S中的port概述 创建yaml文件模板 查看生成yaml格式…

MySQL中的事务

事务处理 事务处理机制在应用程序开发过程中有着非常重要的作用&#xff0c;它可以保证在同一个事务中的操作具有同步性&#xff0c;从而让整个应用程序更加安全。 事务概述 现实生活中&#xff0c;人们经常会进行转账操作&#xff0c;转账可以分为转入和转出两部分&#xf…

通俗介绍人工智能是什么

人工智能(Artificial Intelligence, AI)近年来在国内已掀起一波浪潮&#xff0c;在这样的氛围下&#xff0c;无论是各产业界甚至是一般民众皆对人工智能有着高度的兴趣与好奇&#xff0c;在另一方面&#xff0c;对许多企业而言更重要的目标是利用人工智能增加收益、创造价值。近…

详解Kafka 3.0 稳定版新特性

第一部分: 基础升级 1: 弃用 Kafka 中对 Java 8 的支持 Kafka 目前支持 Java 8、11 和 15&#xff08;即将为 16&#xff09;。换句话说&#xff0c;我们支持两个最新的 LTS 版本和最新的非 LTS 版本。由于我们必须在每个受支持的版本上编译和运行测试&#xff0c;因此从开发和…

Wijmo UI Components for JS 5.2.X Crack

Wijmo UI Components 使用更快、更灵活的 JavaScript UI 组件构建更好的应用程序 使用 Wijmo&#xff0c;将更多时间花在应用程序的核心功能上&#xff0c;并利用我们引人注目的 UI 组件库。需要零依赖&#xff0c;Wijmo 运动弹性网格&#xff0c;业内最好的 JavaScript 数据网…

嵌入式开发:为什么无触摸手势对嵌入式GUI开发团队至关重要

你的嵌入式开发和设计团队准备好满足消费者对无触摸图形用户界面的需求了吗?虽然基于触摸的控制总会有市场&#xff0c;但越来越多的人希望和需要放弃与设备的物理接触&#xff0c;转而支持无触摸交互&#xff0c;例如在屏幕前(或上方)的手势。 无触摸手势的设计考虑 当创建或…

计算结构体大小(内存对齐原则)struct、union、class

这篇博客详细的介绍结构体的大小sizeof&#xff1a;union、struct、class。 一、不同数据类型所占的内存大小&#xff1a; 二、union联合体的结构体大小 1、关注点&#xff1a; &#xff08;1&#xff09;联合体的大小为所有成员变量中所占字节数最大的&#xff1b; &#xf…

Java EE初阶---软件工程环境

1、第三方库 1.1 背景 IT行业流行一句话&#xff0c;叫做“不要重复造轮子”&#xff0c;以Java语言为例&#xff1a; JDK已提供的功能&#xff0c;可以通过相应的 API 直接使用&#xff0c;不用自己重新实现。 JDK没有提供的功能&#xff0c;在富有开源精神的 IT行业&#…

C++ 【多态】

目录 继承中要构成多态的条件(两个条件必须同时满足) 多态注意事项 多态的原理 虚表指针 多态的本质原理是&#xff1a; 析构函数的重写 C11 override 抽象类 写一个函数打印虚表 多继承 多态常考题 多态概念 完成某个行为&#xff0c;不同的对象去完成时会产生出不同…

从鸡头到凤尾,从管理到研发,一个程序员的真实自述~

前言 黄色的树林里分出两条路&#xff0c;可惜我不能同时去涉足&#xff0c;我在那路口久久伫立&#xff0c;我向着一条路极目望去&#xff0c;直到它消失在丛林的深处。但我却选了另外一条路... 一次放弃 我是黄林晴&#xff0c;一个来自二线城市的程序员。熟悉我的老读者都…

ServletConfig和ServletContext接口

一、ServletConfig接口详解 1、简介 Servlet 容器初始化 Servlet 时&#xff0c;会为这个 Servlet 创建一个 ServletConfig 对象&#xff0c;并将 ServletConfig 对象作为参数传递给 Servlet 。通过 ServletConfig 对象即可获得当前 Servlet 的初始化参数信息。一个 Web 应用中…

计算机网络【HTTP请求构造与HTTPS】

计算机网络【HTTP请求构造与HTTPS】&#x1f352;一.HTTP请求构造&#x1f34e;1.1通过 form 表单构造 HTTP 请求&#x1f34e;1.2 通过 ajax 构造 HTTP 请求&#x1f352;二.HTTPS&#x1f34e;2.1什么是HTTPS&#x1f34e;2.2什么是密文&#x1f34e;2.3对称加密&#x1f34e…

linux系统学习笔记9——CANOpen状态转换

CANopenCANopen状态转换CANopen状态转换 从节点上电和内部初始化之后自动进入预损作状太(Pre-operational State),在进入预操作之前,发送标准的启动对象(Boot-up Obiect)。 在预操作状态里,从节点可以通过SDO .被配置和进行设置参数,这个状态不允许 PDO通讯。NMT 主节点可以使…

静态分析技术+jQuery - 制作验证码(信息安全技术作业)

第1关&#xff1a;程序静态分析技术 任务要求参考答案评论1 任务描述相关知识 IDA pro 什么是 IDA proIDA pro的基本使用汇编指令学习ELF文件格式编程要求测试说明任务描述 本关任务&#xff1a; 使用 IDA pro 拿到属于你的 flag !!! 相关知识 为了完成本关任务&#xff0c…

HAWE流量阀

HAWE流量阀 HAWE流量阀常用的号:SEH3-4/90F-G24,SE2-3/15B-G24,SE2-3/70-G24,SEH3-4/120F-G24 SD3-3/30,SD2-3/30P等 HAWE流量阀性能特点 1、可按设计或实际要求设定流量&#xff0c; 能自动消除系统的压差波动&#xff0c;保持流量不变。 2、克服系统冷热不均现象&#xff0c…

进程控制(二)——minishell延续

文章目录进程控制的简单相关回顾环境变量怎么读取的&#xff0c;如何由父进程让子进程拿到呢&#xff1f;minishell代码排错为什么子进程获取不到父进程的环境变量呢&#xff1f;程序替换不会替换父进程的环境变量&#xff1f;minishell最终完整代码总览进程控制的简单相关回顾…

图像处理学习笔记-09-形态学图像处理

预备知识 讨论的对象是二值图像中白色像素的集合&#xff0c;每一个元素是像素的坐标 集合BBB的反射表示为B^\hat{B}B^&#xff0c;也就是集合中的每一个元素(x,y)(x,y)(x,y)被(−x,−y)(-x,-y)(−x,−y)替代 B^{w∣w−b,b∈B}\hat{B} \{w|w-b,b\in B\} B^{w∣w−b,b∈B}集合…

人工智能:TensorFlow深度学习框架介绍

目录 1、TensorFlow简介 2、TensorFlow的主要任务 3. TensorFlow的特点 4、TensorFLow的缺点 5、TensorFlow的用途 6、实际案例 6.1 自动驾驶 6.2 安卓手机自拍功能 6.3 智能音箱 6.4智能医疗 今天给大家简单介绍一下TensorFlow深度学习框架&#xff0c;欢迎互相交流学习&#…

Eclipse切JRE环境后如何恢复- Unrecognized option: --enable-preview

场景 使用switch 新特性 配合 lambda 练习小案例 // 需求&#xff1a; 1 2 3 -> 一、二、 三 int num 1; switch ( num) {// jdk13 可以缺省 break 并且 单语句可以省略 花括号 case 1 -> { System.out.println("一"); }case 2 -> System.out.p…
最新文章