动态规划经典入门级题目*2及详解
题目来自极客学院的视频教程-动态规划(一)
一句话解释动态规划:多阶段最优化决策解决问题的过程
解题技巧:只关注状态转移(子问题之间的关系),不要考虑某个状态是怎么出现的
1.字符串解码
一个只包含大写字母的字符串加密后变成了只包含数字的字符串,加密的规则:
'A' -> 1
'B' -> 2
...
'Z' -> 26
现在给定一个只包含数字的加密过的字符串,求该字符串有多少种解密的方法。例如“12”->"AB", "12"->"L"
解:2位的在26以内的相邻的数可以产生不同的解,字符串用str表示,用一维数组dp[i]来表示从0到i位解码方法总数,dp[0]=1,想从dp[i]得到dp[i+1]:
1.str[i+1]是‘0’,那么他不能单独译成一个字母,一定是和str[i]组合,dp[i+1] = dp[i-1]
2.str[i+1]不是‘0’:
1)str[i]和str[i+1]位不能组成一个字母,将str[i+1]解码为对应的字母,dp[i+1] = dp[i]
2)str[i]和str[i+1]可以组和译成一个字母,则在这里就可以出现2种解码方法,如果单独译dp[i+1],有dp[i]种方法,如果组合起来,有dp[i-1]种方法,那么dp[i+1] = dp[i]+dp[i-1]
代码:
int Decode_num(string& str) {int len = str.length();int *dp = new int[len];dp[0] = 1;if (str[1] == '0') dp[1] = 1;else if (str[0] == '1' || (str[0] == '2' && str[1] <= '6')) dp[1] = 2;else dp[1] = 1;for (int i = 1; i < len-1; i++) {if (str[i+1] == '0') dp[i+1] = dp[i-1];else if (str[i] == '1' || (str[i] == '2' && str[i+1] <= '6')) dp[i+1] = dp[i] + dp[i-1];else dp[i+1] = dp[i];}return dp[len-1];
}
2.最大子数组乘积
给定一个整数数组,求乘积最大的子数组的乘积值
解:
1)首先明确数组中的数可能是负数
2)设数组是vec[],这里我们在for循环中用一个max和min值分别记录包含0~i中包含vec[i]的子数组的乘积的最大值和最小值,为什么一定是包含vec[i]呢,因为只有在这个定义之下,我们才能由i计算到i+1
3)那么包含vec[i]的子数组乘积的最大值就是vec[i],vec[i]*max,vec[i]*min中的最大值(当min和vec[i]同为负,相乘得到最大值),更新max值
4)循环中同时更新min,min就是vec[i],vec[i]*max,vec[i]*min中的最小值
5)返回的结果max_product,是以0~size-1结尾的子数组乘积最大值的最大值
代码:
int Max_product(vector<int>& vec) {int size = vec.size();int max_product = vec[0];int _min = vec[0];int _max = vec[0];for (int i = 1; i < size; i++) {int copy_max = _max;_max = max(max(vec[i], vec[i]*_max), vec[i]*_min);_min = min(min(vec[i], vec[i]*_min), vec[i]*copy_max);max_product = max(max_product, _max);}return max_product;
}
动态规划经典入门级题目*2及详解相关推荐
- 1000以内完数c语言程序_C语言经典面试题目及答案详解(二)
接着上次来说,C语言经典面试题目及答案详解(一)当中大部分是一些概念和理解的东西 ,今天说一说实践操作,有关c的经典程序. 1.输出9*9口诀.共9行9列,i控制行,j控制列. #include &q ...
- c语言sort函数_C语言经典面试题目及答案详解(二)
接着上次来说,C语言经典面试题目及答案详解(一)当中大部分是一些概念和理解的东西 ,今天说一说实践操作,有关c的经典程序. 1.输出9*9口诀.共9行9列,i控制行,j控制列. #include 2. ...
- python小游戏代码大全-20行python代码的入门级小游戏的详解
背景: 作为一个python小白,今天从菜鸟教程上看了一些python的教程,看到了python的一些语法,对比起来(有其他语言功底),感觉还是非常有趣,就随手添了一点内容,改了一个小例程,当着练练手 ...
- python选择排序从大到小_经典排序算法和Python详解之(一)选择排序和二元选择排序...
本文源自微信公众号[Python编程和深度学习]原文链接:经典排序算法和Python详解之(一)选择排序和二元选择排序,欢迎扫码关注鸭! 扫它!扫它!扫它 排序算法是<数据结构与算法>中最 ...
- 李洪强iOS经典面试题156 - Runtime详解(面试必备)
李洪强iOS经典面试题156 - Runtime详解(面试必备) 一.runtime简介 RunTime简称运行时.OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消息机制. 对于C ...
- kmeans python interation flag_机器学习经典算法-logistic回归代码详解
一.算法简要 我们希望有这么一种函数:接受输入然后预测出类别,这样用于分类.这里,用到了数学中的sigmoid函数,sigmoid函数的具体表达式和函数图象如下: 可以较为清楚的看到,当输入的x小于0 ...
- AI 以 5:0 比分击败美顶级飞行员;经典对抗攻击 Deepfool 原理详解
开发者社区技术周刊又和大家见面了,快来看看这周有哪些值得我们开发者关注的重要新闻吧. 2019 年全球公共云服务市场总额达 2334 亿美元 新里程碑!IBM 宣布最高量子体积 64 马斯克将通过实时 ...
- 算法 经典的八大排序算法详解和代码实现
算法 经典的八大排序算法详解和代码实现 排序算法的介绍 排序的分类 算法的时间复杂度 时间频度 示例 图表理解时间复杂度的特点 时间复杂度 常见的时间复杂度 空间复杂度 排序算法的时间复杂度 冒泡排序 ...
- 四川话四级考试题目答案及详解(二)
四川话四级考试题目答案及详解(二) --阿风 下面是四川话四级考试中多选题和填空题的答案及详解: 二.多选题 下面句子中"整"字用法正确的是?(4分) A.你这个发型整的还巴适哈! ...
最新文章
- WebKit、Gecko使用图形库
- 分享一下我为什么可以获得ssp
- Leangoo敏捷开发项目管理软件-工作日志
- 一文详述Attention最新进展
- svn“Previous operation has not finished; run 'cleanup' if it was interrupted“报错的解决方法
- 【MySQl】MyISAM和InnoDB索引对比
- 湖南警察学院计算机科学与技术专业,湖南警察学院计算机科学与技术专业2015年在福建理科高考录取最低分数线...
- 计算机放样在钢结构应用,计算机放样应用于钢结构工程
- 《运筹学》CSU作业答案
- C 与 C++ 谁的效率高,为什么?
- 【LibTorch】Microsoft C++ 异常: c10::NotImplementedError,位于内存位置 0x000000E8A9DAEDC0 处。
- 数据采集之全埋点数据采集分析方法的一些整理
- C语言运算符优先级及结合性
- 西电计算机通信与网络复习
- 【10月20日】CCF HPC China 2021中国高性能计算学术年会
- E Enigmatic Partition 2020牛客暑期多校训练营(第八场)
- TM1652控制-2
- leetcode28.实现strStr()--简单词学KPM算法
- MySQL Order by 和 max哪个性能更高更好?
- DTCC2022 | openGauss打造企业级开源数据库,服务行业核心系统
热门文章
- Processing of multipart/form-data request failed. Stream ended unexpectedly
- 七种公司做不大,十种老板成不了事
- Scala语言超详细介绍(上)
- 率土之滨九游不显示服务器,率土之滨九游版
- 率土之滨服务器维护6,率土之滨几天开6,多少战力可以开6
- ADS中示例文件.7zads格式的打开
- 女人要学会的四种气质
- MMO即时战斗:地图角色同步管理和防作弊实现
- codeforce #501 c Misha and Forest
- [siggraph19]《荒野大镖客2》的大气云雾技术(3/4)