摘要: 问前两个字符串是否能组合成第三个字符串,保持原字符串的顺序。看到别人的代码有两种做法:1、DFShash数组标记足迹,可以减少重复搜索的次数。这个代码太过巧妙,体会体会再体会。。 1 //#define LOCAL 2 #include 3 #include 4 #include 5 usin... 阅读全文
posted @ 2014-07-31 19:54 AOQNRMGYXLMV 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 记忆化搜索,第一次做搜索,好好学习下!dir保存了搜索的四个方向,下右上左这里还懵懵懂懂的,现将模板记下来。=_=!! 1 //#define LOCAL 2 #include 3 #include 4 #include 5 using namespace std; 6 7 const in... 阅读全文
posted @ 2014-07-31 17:38 AOQNRMGYXLMV 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 求最短公共祖先,是最长公共子序列的变形。在DP的同时记录下路径,然后递归回去输出即可。如果碰到公共的,只输出一次。以第一个样例为例:图中数字是最大公共子段的长度,下标代表路径。带下划线的是递归时所走的路径。 1 //#define LOCAL 2 #include 3 #include 4 #i... 阅读全文
posted @ 2014-07-31 13:21 AOQNRMGYXLMV 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 题目就是给一个字符串问最少插入多少个字符能让原字符串变为回文字符串。算法:用原串的长度减去原串与翻转后的串的最大公共字串的长度,就是所求答案。 1 //#define LOCAL 2 #include 3 #include 4 #include 5 #include 6 using name... 阅读全文
posted @ 2014-07-31 10:48 AOQNRMGYXLMV 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 最简单最基本的最长公共子序列的题目。吐槽一下为何没有给数据范围。。 1 //#define LOCAL 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 const int maxn = 1010;... 阅读全文
posted @ 2014-07-30 18:47 AOQNRMGYXLMV 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 最长公共子序列的变形题目大意:给出两个基因序列,求这两个序列的最大相似度。题目中的表格给出了两两脱氧核苷酸的相似度。状态转移方程为:dp[i][j] = max(dp[i-1][j]+Similarity(s1[i], '-'), dp[i][j-1]+Similarity(s2[... 阅读全文
posted @ 2014-07-30 18:25 AOQNRMGYXLMV 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 感觉是数塔的变形或者是升级版WA了好几次,和别人代码对拍才发现问题所在for(k = 2; k 1的事情然后脑袋一抽筋丢掉了等号,误写成了k 3 #include 4 #include 5 #include 6 using namespace std; 7 8 const int INF ... 阅读全文
posted @ 2014-07-30 02:07 AOQNRMGYXLMV 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 没什么好说的,这是我学DP的第一道题目。 1 //#define LOCAL 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 int a[103][103]; 9 10 int main(void... 阅读全文
posted @ 2014-07-30 01:02 AOQNRMGYXLMV 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 这三道题的关系是这样的,1505是1506的加强版,2870又是1505的加强版如果按照上面由简到易的顺序来做的话,还是很简单的这道题的思想就是 枚举+DP因为某些字符可以变值,所以我们枚举a, b, c三个矩阵分别求出对应的h数组以及最大子矩阵,再在里面求出一个最大值即可。 1 //#define... 阅读全文
posted @ 2014-07-30 00:21 AOQNRMGYXLMV 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 给一个矩阵,依然是求满足条件的最大子矩阵不过题目中说任意两列可以交换,这是对题目的简化求出h数组以后直接排序,然后找出(col-j)*h[j]的最大值即可(这里的j是从0开始)因为排序会影响到h数组下一行的求解,所以将h数组中的元素复制到temp数组中去,再排序 1 //#define LOCAL ... 阅读全文
posted @ 2014-07-29 22:52 AOQNRMGYXLMV 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 这题是上一题的升级版关键在于条形图的构造,逐行处理输入的矩阵,遇到'F'则在上一次的条形图基础上再加1,遇到'R'则置为0然后用上一题的算法,求每行对应条形图的最大矩阵的面积。另外:本来是debug都不用就1A的节奏。可在输入数据上,一开始我用的是scanf读入字符 和 getchar跳过无效字符,... 阅读全文
posted @ 2014-07-29 18:33 AOQNRMGYXLMV 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 这个问题姑且也叫做最大子矩阵吧给一个树状图,求一个最大面积的子矩阵思路是这样的,对于每个单位矩阵,求出左边连续不比它低的矩阵的下标,放在l数组里同样,再求出右边连续的不比它低的矩阵的下标这样,对于每个单个矩阵所能得到的最大面积就是(r[i]-l[i]+1)*a[i] 1 //#define LOCA... 阅读全文
posted @ 2014-07-29 17:36 AOQNRMGYXLMV 阅读(150) 评论(0) 推荐(0) 编辑
摘要: dp[i][j]表示以(i,j)为右下角所含棋盘的最大规模,如果 s[i][j] == s[i-1][j-1] && s[i][j] != s[i-1][j] && s[i][j] != s[i][j-1] dp[i][j] = min( dp[i-1][j-1], dp[i-1][j], dp... 阅读全文
posted @ 2014-07-29 10:33 AOQNRMGYXLMV 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 我感觉这更像个数学问题。dp[i][j]表示将i件物品分成j组的方案数。状态转移方程:dp[i][j] = dp[i-1][j-1] + j * dp[i-1][j];将i张卡分成j组可以有之前两种情况得来:i-1张卡分成j-1组,只要将第i张卡独立分成一组就行了,或者是i-1张卡分成j组,第i张卡... 阅读全文
posted @ 2014-07-27 15:40 AOQNRMGYXLMV 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 求子矩阵的最大和对于样例:0 -2 -7 09 2 -6 2-4 1 -4 1-1 8 0 -2其最大子矩阵为9 2-4 1-1 8这个子矩阵的和为15想明白后,这是个最大连续子序列的变形sum[k]存放的是矩阵中第k列从第i行到第j行的和每次求出sum数组的最大... 阅读全文
posted @ 2014-07-27 12:13 AOQNRMGYXLMV 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 本来是很简单的一道题,却想了好长时间由于数据量比较大,所以逐行读入,逐行处理先处理每一行的不相邻元素和的最大值,记录在数组b中最后计算不相邻行的和的最大值二者的状态转移方程都类似:dp[j] = max(dp[j - 1], dp[j - 2] + a[j]); 1 //#define LOCAL ... 阅读全文
posted @ 2014-07-27 09:22 AOQNRMGYXLMV 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 题目中说只需按照所给顺序,不论起点,输出能连续旅游的最多的城市就是不论起点这句,我就卡住了。。看了别人的题解,循环个2n-1次便是把所有的起点都考虑进去了。更详细的解释在代码的注释里。 1 //#define LOCAL 2 #include 3 #include 4 #include 5 u... 阅读全文
posted @ 2014-07-24 17:43 AOQNRMGYXLMV 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 和前面两道题一样不过这题要求输出子序列首尾的元素的值,而且如果所有元素都小于0的话,规定子序列的和为0,并输出整个序列的首尾元素。 1 //#define LOCAL 2 #include 3 #include 4 #include 5 using namespace std; 6 7 co... 阅读全文
posted @ 2014-07-24 14:08 AOQNRMGYXLMV 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 同上题一样,求连续子序列的最大和而且比上题还要简单一些,用不到long long了直接水过 1 //#define LOCAL 2 #include 3 #include 4 #include 5 using namespace std; 6 7 const int maxn = 10000... 阅读全文
posted @ 2014-07-24 13:31 AOQNRMGYXLMV 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 求连续子序列的最大和为毛简单的入门DP没有思路啊。。学习下别人的解法,理解起来倒还是很容易的。 1 //#define LOCAL 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 const in... 阅读全文
posted @ 2014-07-24 13:10 AOQNRMGYXLMV 阅读(150) 评论(0) 推荐(0) 编辑