Common Subsequence-DP
update@2011-10-04
//省略了头文件等
#define mymax(a,b) (a>b?a:b)
char A[1000+1];
char B[1000+1];
int dp[1000+10][1000+10];
int main(){
while(scanf("%s%s",A,B) != EOF){
memset(dp,0,sizeof(dp));
int len_a = strlen(A),len_b = strlen(B);
//A的每一个值都应该尝试和B的每一个值进行匹配
for(int i = 0;i < len_a;i++){
for(int j = 0;j < len_b;j++){
if(i == 0 || j == 0){
if(A[i] == B[j]){
dp[i][j] = 1; //因为它们当中有一个为0所以最多只可能有一个匹配
}
else if(!(i==0 && j== 0)){
if(i == 0){
dp[0][j] = dp[0][j-1];
}else dp[i][0] = dp[i-1][0];
}continue;
}
if(A[i] == B[j]){
dp[i][j] = dp[i-1][j-1] + 1;
}
else dp[i][j] = mymax(mymax(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1]);
}
printf("%d\n",dp[len_a-1][len_b-1]);
}
return 0;
}
链接:
Common Subsequence做了一个多星期的电信报表 = =/ 早知道不选什么软件工程了,坑爹啊。今天做了几个很水的dp题算是有那么点感觉了,比赛都是各种dp,鸭梨........