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. Linux中的configure,make,make install到底在做些什么

    在Linux下经常要安装部署一些软件包或者工具,拿到安装包之后一看,简单,configure,make, make install即可搞定. 有时候我就在想,这个configure,make ,mak ...

  2. Linux基础上

    文件操作                                                                                                 ...

  3. webapi xml序列化删除<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">标签

    在WebApiConfig.Register中加入config.Formatters.Remove(config.Formatters.XmlFormatter); 移除默认的xml序列化器

  4. C#对屏幕分辨率的操作

    winform应用程序 1.新建Resolution.cs类 using System; using System.ComponentModel; using System.Windows.Forms ...

  5. VS2017 ASP.NET MVC 5.0 开部署问题汇总

    1[SqlException (0x80131904): 拒绝了对对象 '****' (数据库 '***',架构 'dbo')的 EXECUTE 权限.] “/”应用程序中的服务器错误. SQL 20 ...

  6. related_name

    定义表Apple: class Apple( models.Model): origin_level = models.ForeignKey(AppleLevel) new_level = model ...

  7. Ajax 请求请求 MVC WebAPI跨域问题;XMLHttpRequest cannot load

    问题:XMLHttpRequest cannot load http://192.168.1.4:9010//api/contacts. The 'Access-Control-Allow-Origi ...

  8. 72.纯 CSS 创作气泡填色的按钮特效

    原文地址:https://segmentfault.com/a/1190000015560736 感想:过渡效果+xyz中一轴. HTML code: <nav> <ul> & ...

  9. Java反射讲解

    首先我们通过代码来看看发射的作用到底是什么. 1. 首先准备两个很简单的业务类 2. 非反射方式切换不同的业务方法调用 当需要从第一个业务方法切换到第二个业务方法的时候,使用非反射方式,必须修改代码, ...

  10. python实战:用70行代码写了一个山炮计算器!

    python实战训练:用70行代码写了个山炮计算器! 好了...好了...各位因为我是三年级而发牢骚的各位伙伴们,我第一次为大家插播了python的基础实战训练.这个,我是想给,那些python基础一 ...