摘要: 求一个序列中 的2*n-1个数字 ,前n+1个数字为严格升序 后n+1个为严格降序,求最长的长度一开始还没想清楚怎么解,其实就是一个LCS问题,从头到尾以及反序求一下LCS由于 d[i]为包含了自身的LCS,所以每次比较 min(d1[i],d2[i]),再 2*min-1即可,d1和d2分别为正序和反序的LCS。由于时间卡的紧,要用之前学过的压栈法求LCS,时间复杂度为n*logn,中间出了一些问题,首先就是保存每个节点的LCS值的时候,如果该点是大于sta[top],那自然LCS为top+1,但是如果不是的话,我一开始写成top,原来不是,是要二分的那个位置才是。。。。还有就是二分一开始调 阅读全文
posted @ 2014-03-20 19:16 KRisen 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 一开始把它当成暴力来做了,即,从终点开始,枚举其最长的回文串,一旦是最长的,马上就ans++,再计算另外的部分。。。结果WA了事实证明就是一个简单DP,算出两个两个点组成的线段是否为回文,再用LCS的类似做法得到每个子结构的最优值。#include #include #define N 1010char s[N];int n,len,d[N][N],sum[N];int min(int a,int b){ if (a0) { tmp=1+sum[j-1]; } ... 阅读全文
posted @ 2014-03-20 15:05 KRisen 阅读(312) 评论(0) 推荐(0) 编辑