2013年8月5日

Common Subsequence

摘要: 1 /*HDU1159 ,最长公共*/ 2 #include 3 #include 4 #include 5 using namespace std; 6 int dp[1000][1000]; 7 char a[1000],b[1000]; 8 int LCS(int n,int m) 9 {10 int i,j;11 for(i=1;i=dp[i][j-1])19 {20 dp[i][j]=dp[i-1][j];21 22 }23 else24 ... 阅读全文

posted @ 2013-08-05 16:06 ok_boy 阅读(194) 评论(0) 推荐(0) 编辑

Greatest Common Increasing Subsequence

摘要: 1 /*HDU1423 最长公共递增*/ 2 #include 3 #include 4 #include 5 using namespace std; 6 #define N 550 7 int dp[N][N]; 8 int s[N],t[N]; 9 10 int main()11 {12 int t1;13 while(scanf("%d",&t1)!=EOF)14 {15 while(t1--)16 {17 int n,m;18 scanf("%d",&n);19 ... 阅读全文

posted @ 2013-08-05 16:05 ok_boy 阅读(188) 评论(0) 推荐(0) 编辑

Palindrome

摘要: 1 /*最长公共+滚动数组HDU1513*/ 2 #include 3 #include 4 char a[5010],b[5010]; 5 short int dp[2][5010]; 6 int LCS(int n,int m) 7 { 8 memset(dp, 0, sizeof(dp)); 9 int i,j;10 for(i=1;i=dp[i%2][j-1])19 {20 dp[i%2][j]=dp[(i-1)%2][j];21 //printf("%d %d %d\n"... 阅读全文

posted @ 2013-08-05 16:04 ok_boy 阅读(170) 评论(0) 推荐(0) 编辑

吉哥系列故事——完美队形I

摘要: 1 /*hud4512 2 dp[i]表示当前以下标i结束的最长公共上升子序列。 3 4 我们让第一个序列为原序列,第二个序列为原系列的反向。 5 6 则,也就是说,第二个序列的顺序为原序列的下标[n-1,0],设为j 7 8 当j枚举到k时,对于dp[0] ~ dp[k-1],都可以得到原序列的一个长度为2*dp[i]的题目要求的子序列。 9 10 可是对于,dp[k],我们怎么判断此时,两个序列是否存在交集呢?假如存在交集,此时题目要求的子序列长度为2*dp[k] - 111 12 这样考虑,假如此时的序列没有交集,则此时两个序列的最长公共上升子序列,在序列二中的起始坐... 阅读全文

posted @ 2013-08-05 16:03 ok_boy 阅读(245) 评论(0) 推荐(0) 编辑

魔法串

摘要: 1 /*HDU4545 最大公共子序列+滚动数组*/ 2 3 4 #include 5 #include 6 #include 7 using namespace std; 8 int dp[2][1010]; 9 char a[1010],b[1010];10 int hash[1010][1010];11 int LCS(int n,int m)12 {13 memset(dp,0,sizeof(dp));14 int i,j;15 for(i=1;i=dp[i%2][j-1])23 {24 dp[i%2... 阅读全文

posted @ 2013-08-05 16:01 ok_boy 阅读(188) 评论(0) 推荐(0) 编辑

最少拦截系统

摘要: 1 /*HDU1257最长递增*/ 2 #include 3 #include 4 int find(int *c,int len,int n) 5 { 6 int l=0,r=len; 7 while(ln) r=mid-1;12 else return mid;13 }14 return l;15 }16 int main()17 {18 int i,j,n;19 int a[1005], c[1005],len;20 while(scanf("%d",&n)!=EOF)21 {22 for(... 阅读全文

posted @ 2013-08-05 16:00 ok_boy 阅读(209) 评论(0) 推荐(0) 编辑

Nested DollsHDU1677

摘要: 1 /*题意:有n个矩形,用长和宽表示,如果一个的长和宽都比另一个小,那么这个嵌放在另一个中 2 所以先对w从大到小排序,w一样的按h从小到大排序,那么就从后面的箱子往前找,只要前面找到一个人h比自己大的就放入c[j]=p[i].h; 3 否则如果自己的h比前面的都大,那么必定询问到c所存的递增序列的长度+1处,那么个数加1,长度加1,把此事的h放在在c的末端 4 这个过程和最大递增子序列的找值过程类似,但是并不是求最长递增,只是利用这个过程,所以二分查找稍微有些改变,如果还是按照 5 最长公共子序列的二分查找,那么h相同的会被覆盖掉比如数据1 1 1 1 2 2 2 2,其中一个2 2会被. 阅读全文

posted @ 2013-08-05 15:59 ok_boy 阅读(158) 评论(0) 推荐(0) 编辑

导航