随笔分类 -  dp

leetcode 87
摘要:题意: 题解: 这道题可以通过dp求解,我们定义dp[i][j][k]为s1中下标i开始,s2中下标j开始,且长度为k的两个子字符串是否为扰乱字符串 然后我们可以发现dp[i][j][k]的求解可以分为两种情况,一种是这两个子字符串分别被分割为两个字符串,且被分割的两个子字符串不进行替换就和另外一个 阅读全文

posted @ 2020-03-11 21:17 QingFengDaHui 阅读(115) 评论(0) 推荐(0)

leetcode 85 最大矩形
摘要:题意: 题解: 我们知道最大矩形一定是由矩形中某个点向上延伸直到为‘0’,然后往左右延伸(在高度得到保证的情况下左右伸展)的矩形 因此我们通过遍历每一行来求取对于以每个点来说的最大矩形并获得最大值 这里最关键的一点就是当遍历到某一个点的上面的那个点为‘0’,此时该点的左右延伸长度不在与上一行进行比较 阅读全文

posted @ 2020-03-11 17:59 QingFengDaHui 阅读(229) 评论(0) 推荐(0)

leetcode 72 编辑距离
摘要:题目: 对于这道题目,我们可以使用dp来解决,我们定义dp[i][j]表示将word1中的前 i 个字符到word2的前 j 个字符的最短距离, 然后我们可以得到dp的方程式,当word1的第i个字符等于word2的第 j 个字符时,对于word1来说存在两种操作,即插入和删除, 此时的方程式如下: 阅读全文

posted @ 2020-03-10 22:05 QingFengDaHui 阅读(239) 评论(0) 推荐(0)

最长上升子序列 leetcode 300
摘要:dp解法 int lengthOfLIS(vector<int>& nums) { //dp解法O(n^2) int len=nums.size(); if(len==0) return 0; vector<int> dp(len,1); int maxlen=1; for(int i=1;i<le 阅读全文

posted @ 2020-03-09 18:37 QingFengDaHui 阅读(233) 评论(0) 推荐(0)

最长回文子序列 leetcode 516
摘要:class Solution { public: int longestPalindromeSubseq(string s) { int len=s.size(); if(len==0) return 0; vector<vector<int>> dp(len,vector<int>(len,1)) 阅读全文

posted @ 2020-03-09 18:33 QingFengDaHui 阅读(131) 评论(0) 推荐(0)

区间动态规划 scu2117 加分二叉树
摘要:题目链接:https://vjudge.net/problem/SCU-2117 #include <iostream> #include<vector> #include<algorithm> #include<string> #include<map> using namespace std; 阅读全文

posted @ 2020-03-09 16:15 QingFengDaHui 阅读(166) 评论(0) 推荐(0)

hdu 5890(01背包+bitset优化)
摘要:这道题就是给一堆数(n),然后从中删去1到3个,如果剩下的数中能选出10个加起来等于87,输出yes,否则输出No 这道题用到一个bitset优化,bitset用法可以百度下,另外这道题极度坑(注意输入输出) 假如dp[i]=1001,i个数之和为1和4的组合存在, 所以我们要求的就是dp[10][ 阅读全文

posted @ 2019-03-08 20:27 QingFengDaHui 阅读(202) 评论(0) 推荐(0)

CodeForces - 1105C (dp)
摘要:这道题是一道dp题,给出数组的个数n,上下边界l和r(包括l,r),要求满足所有数组中元素之和满足被3整除的情况有多少种, 我们可以知道l到r中被3整除的数有mod0个,被3整除余1的有mod1个,被3整除余2的有mod2个。 dp[i][j]表示数组中前i个数的和被3整除余j的个数,我们要求的就是 阅读全文

posted @ 2019-03-06 19:13 QingFengDaHui 阅读(109) 评论(0) 推荐(0)

hdu 2602(01背包)
摘要:01背包:有N件物品和一个容量为V 的背包。放入第i件物品耗费的空间是Ci,得到 的价值是Wi。求解将哪些物品装入背包可使价值总和最大。(每件物品只有一件,放或者不放) 即F[i,v]表示前i件物品恰放入一个容量为v的背包可以 获得的最大价值。则其状态转移方程便是:F[i,v] = max{F[i− 阅读全文

posted @ 2019-03-04 20:20 QingFengDaHui 阅读(91) 评论(0) 推荐(0)

poj 2479 (最大子串和的变形)
摘要:首先front[i]是以第i个元素开头的最大子串和,back[i]是以第i个元素结尾的最大子串和,front_m[i]是从第i个元素到最后一个元素这段中最大子串和,然后ans=max(ans,back[i]+front_m[i+1]) 阅读全文

posted @ 2019-03-04 17:46 QingFengDaHui 阅读(182) 评论(0) 推荐(0)

poj 1088(dfs+dp)
摘要:这道题本来可以用dfs做,但这样会超时,因为需要对每一个点进行dfs求从该点出发的最长距离,但我们在对一个点dfs的过程中,往往可以求到很多点,所以对每一个点dfs实际上是多余的,所以我们在dfs的基础上加上dp就可以得到答案。 阅读全文

posted @ 2019-02-28 22:26 QingFengDaHui 阅读(97) 评论(0) 推荐(0)

HDOJ 1003 (最大连续子区间和)
摘要:dp[i]表示以in[i]结尾的最大子区间和,则dp[i]=max(0,dp[i-1])+in[i];然后比较dp[1...n]找到最大值 这道题的难点在于找到首尾的位置 阅读全文

posted @ 2019-02-27 19:44 QingFengDaHui 阅读(149) 评论(0) 推荐(0)

poj 1458(dp+最长公共子序列)
摘要:若有a,b两个字符串,dp[i][j]表示a字符串前i个和b的前j个字符的最长公共子序列,由此可以推出若a[i-1]=b[i-1],则dp[i][j]=dp[i-1][j-1]+1;否则dp[i][j]=max(dp[i-1][j],dp[i][j-1]) 阅读全文

posted @ 2019-02-26 21:34 QingFengDaHui 阅读(126) 评论(0) 推荐(0)

poj 1163(简单dp)
摘要:#include<iostream> #include<string.h> #include<string> #include<sstream> #include<vector> #include<deque> #include<map> #include<algorithm> #include<i 阅读全文

posted @ 2019-02-26 20:54 QingFengDaHui 阅读(109) 评论(0) 推荐(0)

导航