摘要: 这倆道题目都是求最长递增子序列,只不过各自都有点点区别hdu 1025题意:•有两行点, 每行n个. 第一行点和第二行点是一一对应的, 有线连接, 如下图所示 •选择尽量多的线, 两两不交叉分析:•设与第1行第i个点对应的是第2行第f[i]个点 •假设i<j, 两条线(i, f[i])和(j, f[j])的充要条件是f[i]<f[j], 因此问题变成了 求f的最长递增子序列了hdu1025#include<iostream>#include<algorithm>#define MAXN 500010using namespace std;int a[MAXN 阅读全文
posted @ 2011-08-21 16:25 枕边梦 阅读(278) 评论(0) 推荐(0) 编辑
摘要: 这倆道是一样的题目,题意就是将一个字符串转变为回文串的最少添加数有俩种方法:1.求正串和反串的最长公共子序列,再用原先串的长度相减即可;2.令c (i,j)表示将子串aiai+1…aj变成回文词的最小添加字符数。则这此问题就是要求c(1,n)。 •c(i,j)满足如下递推关系: 从代码可以看出,俩种方法的效率想差很大第一种方法#include<iostream>#include<string>#include<algorithm>using namespace std;int main(){ char s1[5010],s2[5010]; int s[2][ 阅读全文
posted @ 2011-08-21 09:23 枕边梦 阅读(295) 评论(0) 推荐(0) 编辑