| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 阿里数学竞赛之动态规划 -> 正文阅读 |
|
[数据结构与算法]阿里数学竞赛之动态规划 |
一般涉及最值和多种情况之间关系的优先考虑动态规划 典型的"双蛋黄"动态规划: 解题思路: 1.首先设?为k个数量的杯子对应楼层T的最小检验次数,表示从t层摔下去后状态为state时还需检验的最小次数 2.首先临界层的定义是:杯子出现裂痕的层数 3.首先题目中提出假如t层为情况一,那么t+3才出现情况三 一:无破碎,无裂痕: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? F(k,无破碎无裂痕)=M(k,T-t),t代表当前检验的楼层 t<=T 因为假如从t层摔下去仍无裂痕,表示在需在t~T层检验 二:无破碎,有裂痕: ? ? ? ? ? ? ? ? ? ? ? ? ? ???F(?k,无破碎有裂痕) ={0,t=1时? | |?1,t>1?} t代表当前检验的楼层 t<=T 因为当假如从第一层往下摔后,出现裂痕,表示临界层为0层,如果大于1,只需要再测试一次就行 三:有破碎,有裂痕: ? ? ? ? ? ? ? ? ? ? ? ? ? ? F(k,有破碎有裂痕)={0 ,t<=3||M(k-1,T-t),t>3} t代表当前检验的楼层 t<=T 假如从第三层摔下去后破了,表示临界层为0层,否则若t>3,则返回原始问题的最优子结构 四:建立动态方程 那么F(t)在t层的最小检验次数则为 ? ? ? ? ? ? ? ? ? F(t)=max{F(k,无裂痕无破碎),F(k,无破碎有裂痕),F(k,有破碎有裂痕)}+1 取max是因为需取三者最大才能满足检验要求,+1是无论如何都得检验一次 而最小值则在1~T中循环遍历产生 即 F(t)=min(max{F(k,无裂痕无破碎),F(k,无破碎有裂痕),F(k,有破碎有裂痕)}+1),1<=t<=T 此时根据t的范围分为两种: 当t<=3时 F(t)=min(max{M(k,T-t),1,0}+1} 当t>3时? F(t)=min(max{M(k,T-t),1,M(k-1,T-t)}+1) 代码如下: 其中初始化解释: 1.当dp[i][1]即代表只有一个物品测试时,拿T层来说,有可能到了T层还是无破碎无裂痕,因此总共要测试T次 2.dp[1][i]即代表在楼层1往下摔,只需测试一次就能得出结果 3.每次遍历操作前一定要把dp[i][j]设为无穷大,才能保证结果正确
最后得出程序结果为8 即表示只需从8个不同的楼层中往下摔即可保证准确测出N |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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:00:27- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |