随笔分类 - DP
摘要:题目传送门题意:求单词的最长公共子序列,并要求打印路径分析:LCS 将单词看成一个点,dp[i][j] = dp[i-1][j-1] + 1 (s1[i] == s2[j]), dp[i][j] = max (dp[i-1][j], dp[i][j-1])代码:#include #include #...
阅读全文
摘要:题目传送门题意:中文题面分析:LIS模板题:n - 最长下降子序列 -> 最长上升子序列 贪心做法以后再补:)代码:#include #include #include #include #include using namespace std;const int MAXN = 1e4 + 10;...
阅读全文
摘要:题目传送门题意:LCIS(Longest Common Increasing Subsequence) 最长公共上升子序列分析:a[i] != b[j]: dp[i][j] = dp[i-1][j];a[i]==b[j]: dp[j]=max(dp[j],dp[k]); (1#include #in...
阅读全文
摘要:题目传送门 1 /* 2 递推DP:官方题解 3 令Fi,j代表剩下i个人时,若BrotherK的位置是1,那么位置为j的人是否可能获胜 4 转移的时候可以枚举当前轮指定的数是什么,那么就可以计算出当前位置j的人在剩下i − 1个人时的位置 5 ...
阅读全文
摘要:题目传送门题意:LIS最长递增子序列 O(nlogn)分析:设当前最长递增子序列为len,考虑元素a[i]; 若d[len]#include #include #include using namespace std;const int N = 1e5 + 10;const int INF = 0...
阅读全文
摘要:题目传送门题意:一个字符串要变成回文串至少要插入多少个字符分析:LCS,长度 - 原串和反串的最大相同长度就是要插入的个数。解释一下,当和反串相同时,在原串中已经是回文的部分了,那么减去LCS长度后剩下的多少个插入多少个一定就能使原串回文dp数组二维都开5000的话就会超内存,这里就用到了滚动数组,...
阅读全文
摘要:题目传送门题意:两个字符串结合起来,公共的字符只输出一次分析:LCS,记录每个字符的路径代码:/* LCS(记录路径)模板题: 用递归打印路径:)*/#include #include #include #include #include using namespace ...
阅读全文
摘要:题目传送门题意:找一条从顶部到底部的一条路径,往左下或右下走,使得经过的数字和最大。分析:递推的经典题目,自底向上递推。当状态保存在a[n][j]时可省去dp数组,空间可优化。代码1:/************************************************* Author ...
阅读全文
摘要:题目传送门 1 /* 2 找规律/数位DP:我做的时候差一点做出来了,只是不知道最后的 is_one () 3 http://www.cnblogs.com/crazyapple/p/3315436.html 4 数位DP:http://blo...
阅读全文
摘要:题目传送门 1 /* 2 题意:已知丢失若干卡片后剩余的总体积,并知道原来所有卡片的各自的体积,问丢失的卡片的id 3 DP递推:首先从丢失的卡片的总体积考虑,dp[i] 代表体积为i的方案数,从dp[0] = 1递推,累加的条件是dp[j]上一个状态已经有方案, 4 ...
阅读全文
摘要:题目地址:http://blog.csdn.net/shiyuankongbu/article/details/10004443 1 /* 2 题意:在i前面找回文子串,在i后面找回文子串相互配对,问有几对 3 DP:很巧妙的从i出发向两头扩展判断是否相同来找回文串 4 ...
阅读全文
摘要:题目传送门 1 /* 2 状态压缩DP:先处理硬性条件即不能种植的,然后处理左右不相邻的, 3 接着就是相邻两行查询所有可行的种数并累加 4 5 写错一个地方差错N久:) 6 详细解释:http://www.tuicool.com/articles/JV...
阅读全文
摘要:题目传送门 1 /* 2 题意:n*n的矩阵,放置k个king,要求king互相不能攻击,即一个king的8个方向都没有另外的king,求方案个数 3 状态压缩DP:dp[i][num[j]][s] 代表在第i行,放置num[j]个king,其状态为s时的方案数 4 ...
阅读全文
摘要:题目传送门 1 /* 2 题意:一个h*w的矩阵(1 8 #include 9 #include 10 #include 11 #include 12 #include 13 using namespace std;14 15 const int MAXN = 1e4 + 10;16 co...
阅读全文
摘要:题目传送门题意:输出两字符串的最长公共子序列长度分析:LCS(Longest Common Subsequence)裸题。状态转移方程:dp[i+1][j+1] = dp[i][j] + 1; (s[i] == t[i])dp[i+1][j+1] = max (dp[i][j+1], dp[i+1]...
阅读全文
摘要:题目传送门题意:LIS(Longest Increasing Subsequence)裸题分析:状态转移方程:dp[i] = max (dp[j]) + 1 (a[j] #include #include using namespace std;const int N = 1e4 + 10;con...
阅读全文