1,Triangle

 int mininumTotal(vector<vector<int>>& triangle)  {
for (int i = triangle.size() - ; i >= ; --i) {
for (int j = ; j < i + ; ++j) {
// 从下往上依次保存当前路径的最小值,上层只会用到下层的最小值
triangle[i][j] += min(triangle[i + ][j], triangle[i + ][j + ]);
}
}
return triangle[][];
}

triangle

2,Maximum SubArray

 /*
* 状态转移方程为:f[j] = max{ f[j-1] + S[j],S[j] },其中 1 <= j <= n
* target = max{ f[j] },其中 1 <= j <= n
*/
int maxArray(vector<int>& nums) {
int n = nums.size();
vector<int> dp(n + );
dp[] = ;
for (int i = ; i < n; ++i) {
dp[i + ] = max(dp[i] + nums[i], nums[i]);
}
return *max_element(dp.begin(), dp.end());

maxArray

3,Palindromic Substrings

 /*
* dp[i][j] 的值表示 s[i,j]这个字串是否为回文字符串
*/
int countSubstrings(string& s) {
int n = s.size();
int res = ;
vector<vector<bool>> dp(n, vector<bool>(n, false));
for (int i = n - ; i >= ; i--) {
for (int j = i; j < n; ++j) {
dp[i][j] = (s[i] == s[j] && (j - i <= || dp[i + ][j - ]));
if (dp[i][j]) res++;
}
}
return res;
}

countSubstrings

4,Palindromic Substrings(II)

 /*
* p[i][j]用来判断 s[i][j]这个字串是否是回文子串
* dp[i] 用来记录[0,i]这个范围内的最小切割数
* 所以只用求 dp[n-1] 的值就是答案
*/
int minCut(string& s) {
if (s.empty()) return ;
int n = s.size();
vector<vector<bool>> p(n, vector<bool>(n));
vector<bool> dp(n); for (int i = ; i < n; ++i) {
dp[i] = i; // 对 dp[i]初始化为最大切割数
for (int j = ; j <= i; ++j) { // 对每一个子串s[i][j]进行遍历
if (s[i] == s[j] && (i - j <= || p[j + ][i - ])) { // 如果s[j][i] 为回文子串
p[j][i] = true;
dp[i] = (j == ) ? : min(dp[i], dp[j - ] + );
}
}
}
return dp[n - ];
}

minCut

5,Longest Common Substring

 /*
× 求解最长公共子串(一定是连续才称为子串)
× 初始化:dp[0][j] = 0;dp[i][0] = 0; 第0行全为0,第0列全为0
× 0 ; (i==0 || j==0)
* 状态转移方程: dp[i][j] = dp[i-1][j-1] + 1; (s1[i] == s2[j])
* 0 ; (s1[i] != s2[j])
× 结果:每次保存字符串长度的最大值即为所求
*/
int lcs(string s1,string s2) {
int len1 = s1.length();
int len2 = s2.length();
int res = ;
vector<vector<int>> dp(len1+,vector<int>(len2+,)); for(int i=;i<=len1;++i) {
for(int j=;j<=len2;++j) {
if(s1[i] == s2[j]) dp[i][j] = dp[i-][j-] + ;
res = max(res,dp[i][j]);
}
}
return res;
} /*
* 求解最长子序列(不一定连续)
× 初始化:dp[0][j] = 0;dp[i][0] = 0;
* 0; (i == 0 || j == 0)
× 状态转移方程:dp[i][j] = dp[i-1][j-1] + 1; (s1[i] == s2[j])
* max(dp[i-1][j],dp[i][j-1]);(s1[i] != s2[j])
* 结果:最后保存的 dp[len1][len2] 即为所求
*/
int lcs(string s1,string s2) {
int len1 = s1.length();
int len2 = s2.length();
vector<vector<int>> dp(len1+,vector<int>(len2+,)); for(int i=;i<=len1;++i) {
for(int j=;j<=len2;++j) {
if(s1[i] == s2[j]) dp[i][j] = dp[i-][j-] + ;
else dp[i][j] = max(dp[i-][j],dp[i][j-]);
}
}
return dp[len1][len2];
}

lcs

leetcode 动态规划类型题的更多相关文章

  1. leetcode 字符串类型题

    1,Vaild Palindrome bool isPalindrome(string& s) { transform(s.begin(), s.end(), s.begin(), tolow ...

  2. leetcode 树类型题

    树的测试框架: // leetcodeTree.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream& ...

  3. leetcode 链表类型题总结

    链表测试框架示例: // leetcodeList.cpp : 定义控制台应用程序的入口点.vs2013 测试通过 // #include "stdafx.h" #include ...

  4. leetcode 数组类型题总结

    1,removeDuplicates(I) int removeDuplicatesI(vector<int>& nums){ // 重新组织数组,同 removeDuplicat ...

  5. leetcode 数组类型题

    // ConsoleApplication1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <Windows.h& ...

  6. leetcode动态规划--基础题

    跳跃游戏 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 思路 根据题目意思,最大跳跃距离,说明可以跳0--n ...

  7. 快速上手leetcode动态规划题

    快速上手leetcode动态规划题 我现在是初学的状态,在此来记录我的刷题过程,便于以后复习巩固. 我leetcode从动态规划开始刷,语言用的java. 一.了解动态规划 我上网查了一下动态规划,了 ...

  8. LeetCode 第70题动态规划算法

    导言 看了 动态规划(https://www.cnblogs.com/fivestudy/p/11855853.html)的帖子,觉得写的很好,记录下来. 动态规划问题一直是算法面试当中的重点和难点, ...

  9. leetcode 第188题,我的解法,Best Time to Buy and Sell Stock IV

    <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...

随机推荐

  1. solr的基础使用

    查询运算符 例如:http://localhost:8984/solr/mycore/select?q=*:* :  指定字段查指定值,如返回所有值q=*:* ?  匹配单个字符, 例如: q=tit ...

  2. (引用)!Unicode,GBK以及UTF8的联系和区别

    在实现单片机显示汉字的操作时,了解到有关汉字编码的相关概念. Unicode是一种字符集,该字符集可以涵盖世界上所有的语言.最常见的字符集是ASC II-0~127(0x00~0x7f).Unicod ...

  3. gin的url查询参数解析

    gin作为go语言最知名的网络库,在这里我简要介绍一下url的查询参数解析.主要是这里面存在一些需要注意的地方.这里,直接给出代码,和运行结果,在必要的地方进行分析. 代码1: type Struct ...

  4. [UE4]Static Mesh的碰撞体

    一.可以在3D建模的时候添加碰撞体,导入到UE4的时候,碰撞体也会跟着导入进来. 二.也可以在UE4中自行添加碰撞体 三.在UE4中添加编辑碰撞体 四.选择碰撞体可以移动.缩放.旋转碰撞体,如果模型比 ...

  5. Oracle数据库ORA-01109 数据库未打开

    引致 https://blog.csdn.net/colinmok/article/details/39504879?locationNum=11&fps=1  感谢! 在plsql创建了2表 ...

  6. Linux内存解读

    1.free -m命令 [root@crawler ~]# free -m total used free shared buffers cached Mem: -/+ buffers/cache: ...

  7. 检测Tensorflow可用设备(比如:显卡)

    打开python命令行,输入以下命令: python -c "from tensorflow.python.client import device_lib;device_lib.list_ ...

  8. mybatis入门篇:存储过程的操作

    1.无ResultType/ResultMap查询 先定义一个查询的存储过程: DELIMITER // CREATE PROCEDURE `select_user_by_id`( IN userId ...

  9. WPF 耗时操作时,加载loging 动画 (BackgroundWorker 使用方法)

    1.定义一个全局 BackgroundWorker private System.ComponentModel.BackgroundWorker bgMeet0; 2.设置执行耗时的任务为True b ...

  10. Eclipse 上传 删除 下载 分析 hdfs 上的文件

    本篇讲解如何通过Eclipse 编写代码去操作分析hdfs 上的文件. 1.在eclipse 下新建Map/Reduce Project项目.如图:  项目建好后,会默认加载一系列相应的jar包. 下 ...