线性DP

53. 最大子数组和

思路

code

int maxSubArray(vector<int>& nums) {//res:最后所有状态的最终Max结果//lat:当前f[i]状态的Maxint res = INT_MIN, last = 0;for (int i = 0; i < nums.size(); i++){//当前f[i]状态最大值(使用下面的状态转移方程得出)//f[i] = max( nums[i] , f[i - 1] + nums[i] )int now = max(last, 0) + nums[i];/*最终是所有状态取一个max所以此处保存前后两个状态相互比较的最终结果*/res = max(now, res);//更新最后,当为i时候,f[i]的最大值,即lastlast = now;}return res;}

120. 三角形最小路径和

思路

code

//自上而下
int minimumTotal(vector<vector<int>>& nums) {int n = nums.size();vector<vector<long long>>f(n, vector<long long>(n));f[0][0] = nums[0][0];for(int i = 1; i < n ;i++)for (int j = 0; j <= i; j++){f[i][j] = INT_MAX;//边界判断if (j > 0) f[i][j] = min(f[i][j], f[i - 1][j - 1] + nums[i][j]);if (j < i) f[i][j] = min(f[i][j], f[i - 1][j] + nums[i][j]);}long long res = INT_MAX;for (int i = 0; i < n; i++) res = min(res, f[n - 1][i]);return res;}//自下而上不需要考虑边界问题
int minimumTotal(vector<vector<int>>& f) {// f.size()-2 是因为最后一行不需要计算for (int i = f.size() - 2; i >= 0; i--)for (int j = 0; j <= i; j++)f[i][j] += min(f[i + 1][j], f[i + 1][j + 1]);return f[0][0];
}

63. 不同路径 II

思路

code

class Solution {
public:int uniquePathsWithObstacles(vector<vector<int>>& o) {int n = o.size();if (!n) return 0;int m = o[0].size();vector<vector<int>> f(n, vector<int>(m));for (int i = 0; i < n; i ++ )for (int j = 0; j < m; j ++ )//判断如果不为障碍物的话才执行if (!o[i][j]) {if (!i && !j) f[i][j] = 1;//特判左上角开始位置else {//如果不是第一行if (i) f[i][j] += f[i - 1][j];//如果不是第一列if (j) f[i][j] += f[i][j - 1];}}return f[n - 1][m - 1];}
};

121. 买卖股票的最佳时机

思路

此题目为一个动态规划的过程,目标是需要求得最大的利润。

1.最大利润(分析)把整个区间划分为若干份,计算出区间每一个的局部最大值,然后再比较出整体区间的最大值即为答案。

max(max[0],max[1],max[2],max[---])

2.当前最利润为:当前的元素prices[i] -  过往区间最小的值(minp),并且更新过往最大利润res

3.最终更新最小值(minp) = min(当前最小值(即prices[i]自身),过往区间最小值(minp))

4.总结 :线性记录 res 和 minp 始终为过往区间的(最大利润) 与 (最小值)

code

int maxProfit(vector<int>& prices) {//res为当前最终结果int res = 0;for (int i = 0, minp = INT_MAX; i < prices.size(); i++) {//prices[i] - minp为当天最大利润//max(res, prices[i] - minp)为截止至今日,最大利润//res = max(res, prices[i] - minp);更新当前扫描的最大利润res = max(res, prices[i] - minp);//更新前面最小值(当前更新位置始终为整个区间的最小值)minp = min(minp, prices[i]);}return res;
}

leetcode(动态规划专题)相关推荐

  1. Leetcode动态规划专题(共38道)

    某一问题有很多重叠子问题 每一状态一定由上一状态推导出来 而贪心没有状态推导,而是直接选局部最优 解决方式: 确定dp数组(dp table)以及下标的含义 确定递推公式 dp数组如何初始化 确定遍历 ...

  2. LeetCode 动态规划《简单》部分 Python实现

    #2018-06-07 June Thursday the 23 week, the 158 day SZ #LeetCode 动态规划简单部分 Python实现 '''爬楼梯 假设你正在爬楼梯.需要 ...

  3. 20200707:动态规划专题之不同路径

    动态规划复习day01 动态规划的题目一直是本人的弱项,这周尝试连续7天的动态规划专题,争取做到有的放矢. 不同路径Ⅰ和Ⅱ解析 题目一:不同路径 解题思路 依据动态规划解题的套路思路 确定状态和选择, ...

  4. Leetcode动态规划部分典型题目分类及总结

    参考内容 https://leetcode-cn.com/problems/longest-palindromic-substring/solution/zhong-xin-kuo-san-dong- ...

  5. ACM题解——动态规划专题——G天上掉馅饼

    ACM题解--动态规划专题--G.天上掉馅饼 题目描述 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉 ...

  6. [LeetCode]动态规划求解博弈问题

    博弈论是有趣又有用的知识,可以用来预测在特定的规则下,人们会做出怎样的行为,又会导致怎样的结果.利用博弈论来指导人们的行事法则甚至商业操作,比如著名的囚徒困境就被很好的利用在了商业竞争上.同样,Lee ...

  7. LeetCode动态规划股票系列整理

    写在前面 股票感觉是LeetCode动态规划中系列最多的一类,交易次数不同,有冷冻期,含手续费,让买卖的最佳时机千奇百怪,但是只要掌握dp的方法,解决起来还是有套路可循的.依据dp的常规思想,股票问题 ...

  8. leetcode探索专题中的初级算法练习题(python代码+解题思路)

    本文记录leetcode探索专题中的初级算法练习题,附python实现代码&解题思路,做题过程不免查阅网络资料,侵删~如有错误,欢迎指正交流! 目录 专题一:数组: 26.从排序数组中删除重复 ...

  9. LeetCode Hot100 ---- 动态规划专题

    动态规划问题 力扣121:买卖股票(一次交易) 力扣122:买卖股票(多次交易) 力扣134:加油站 力扣309:买卖股票(包含冷冻时间) 力扣322:零钱兑换 力扣518:零钱兑换 力扣53:最大子 ...

最新文章

  1. Boost:自定义双端队列的测试程序
  2. 基于java的网络爬虫框架(实现京东数据的爬取,并将插入数据库)
  3. python场景应用方向_python的应用场景及学习方向
  4. 怎么能把看不清的照片给看清_拍完照不会后期怎么办?教你一个懒人办法,能帮照片变“高级”...
  5. Memcache 查看列出所有key的方法
  6. IOS动画隐式,显式,翻页
  7. Ubuntu下怎么通过命令完成蓝牙的配对和连接
  8. 写一个SFTP工具类实现连接
  9. 游程编码详解(C语言)
  10. php万能密码在线视频讲解,万能密码
  11. angularjs+uib-pagination实现同一页面多个分页功能
  12. http://gm100861.blog.51cto.com/1930562/954333
  13. 数据分析/机器学习 350+ 数据集链接整理,免费下载点开就用
  14. 彻底理解confidence interval和credible interval
  15. 如何选择工业中CCD相机与CMOS相机
  16. Windbg调试学习
  17. 栈和堆的区别是什么? 为什么说栈的速度快,堆的速度慢?
  18. java ios 3des_3DES在Android、Ios 和Java 平台的加密解密
  19. 南宁富士康c语言笔试题,富士康笔试题目
  20. GPS从入门到放弃(七) --- GPS卫星位置解算

热门文章

  1. jboss架构_检查Red Hat JBoss BRMS部署架构的规则和事件(第二部分)
  2. 如何在Flutter(REST API)中进行API调用
  3. 自动化测试在CI CD管道中的作用
  4. Java 8 map(),flatMap()示例
  5. 加密数据的检索_透明地持久保存并从数据库中检索加密的数据
  6. 阿里媒体转码公共参数_Xuggler教程:转码和媒体修改
  7. Mockito 101
  8. 为数据访问代码编写测试–不测试框架
  9. 使用Hazelcast发布和订阅
  10. JavaFX 2.0布局窗格– BorderPane