intさわだんのBlack History

刹那的レジェンドになりたい。

POJ1458 Common Subsequence

あの有名な最長共通部分列問題。

典型的な問題。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;

int main(){
	
	char a[2000],b[2000];
	
	while(cin>>a>>b){
		
		int dp[1001][1001] = {0};
		
		int alen = strlen(a);
		int blen = strlen(b);
		
		for(int i = 0;i < alen;i++){
			for(int j = 0;j < blen;j++){
				
				if(a[i] == b[j]){
					dp[i+1][j+1] = dp[i][j]+1;
				}else{
					dp[i+1][j+1] = max(dp[i+1][j],dp[i][j+1]);
				}
				
			}
		}
		
		printf("%d\n",dp[alen][blen]);
	}
	
	return 0;
	
}