| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 动态规划(牛客网) -> 正文阅读 |
|
[数据结构与算法]动态规划(牛客网) |
简单系列 1.股票
?已知条件是一维的,所求可以用一个变量表示
2.矩阵的最小路劲和
已知条件是二维的,所求是用二维来表达 dp[i][j] += min(从上边先来,从右边过来)
3.NC126?换钱的最少货币数
对于拥有3种可以兑换的面值的话,用这些面值的和来表示20,且钱数最少。用数值表达的方法,会有解不出的解,用动态规划合适。 20=15+5 ,那么 15 = 10+5, 10 =5+5,5 可以直接被面值表示。 假设从0块到20块钱,从已知的面值往前推能够得到的钱: 0块钱是无论如何也无法表示的,用了0张钱 1块钱是5,2,3这些面值无论如何都得不到的,假设为x,x来表示比用最多的钱的张数还大 2块钱可以用面值2得到,用了1张钱 3块钱只能由面值3得到,用了1张钱 4块钱只能用2*面值2 得到,用了2张钱,用面值1+面值3的张数为x,最终用了2张 5块钱能用面值3+面值2得到,用了2张钱,或者用面值5得到,用1张钱,按照要求,最少用1张钱,用其他的面值,其钱的张数不是最少的。得到 min(dp[5],dp[5-5]+1)=1张,min(dp[5],dp[5-2]+1)=min(1,2)=1张,min(dp[5],dp[5-3]+1)=min(1,2)=1张 dp[5-5]+1 表示5块钱用面值5表示了之后的钱的张数,由于面值5是有的,直接表示5块钱,用了1张钱 6块钱,可以用标红的钱是能够拥有最少钱数的面值了,可以用标红的面值来表示6 =min(dp[6],dp[6-5]+1)=min(dp[6],dp[1]+1)=x, min(dp[6],dp[6-2]+1)=min(x,dp[4]]+1) =?min(x,2+1) = 3,4块钱的用钱张数已经被求出来了=2 ,min(dp[6],dp[6-3]+1)=min(3,dp[3]+1) = 2,3块钱的用钱张数已经被求出来了=1 最终 = 2 以此类推到20的时候。 dp[aim] = min(没用某个数值表示,用了某个数值来表示)=min(dp[i],dp[i-j]+1),j 是arr当中的值,只有当 i 不比? j 小时,i块钱 才能用arr当中的面值来表示。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 2:33:52- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |