hdu 1423 Greatest Common Increasing Subsequence
http://acm.hdu.edu.cn/showproblem.php?pid=1423
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int ch1[1110], ch2[1110], dp[1110], len1, len2;
void dynamic(){
int i, j, k, pos, mm;
// dp[0] = -1;
for( i= 1; i<= len1; i++){
pos = 0;
for( j= 1; j<= len2; j++){
//求出j前,比i小的最大公共点所在pos
if( ch1[i] > ch2[j] && dp[pos] < dp[j]){
pos = j;
}
//当出现相等情况时,前面的点已找到
if( ch1[i] == ch2[j]){
dp[j] = dp[pos] + 1;
}
}
}
for( i= 1, mm = 0; i<= len2; i++){
mm= max(mm, dp[i]);
}
printf("%d\n", mm);
}
int main(){
//freopen("1.txt", "r", stdin);
int i, j, k, T;
scanf("%d", &T);
while( T-- ){
scanf("%d", &len1);
for( i= 1; i<= len1; i++)
scanf("%d", &ch1[i]);
scanf("%d", &len2);
for( i= 1; i<= len2; i++)
scanf("%d", &ch2[i]);
memset( dp, 0, sizeof( dp));
dynamic();
if( T)printf("\n");
}
return 0;
}