PKU 1458-Common Subsequence
問題概要
空白を含まない文字列2つがいくつかの空白に区切られて与えられる.
これらの最大共通部分列の長さを求めよ.
解法
文字列の長さ等の情報が読み取れなかったので適当に長さを1000文字程度だとする.
後は普通に最大共通部分列を求める.
実装(C++)
#include <cstdio> #include <cstring> #include <iostream> using namespace std; int dp[1001][1001]; #define REP(i,x) for(int i=0;i<(int)(x);i++) int main() { string a,b; for(;cin>>a>>b;){ int as=a.size(),bs=b.size(); memset(dp,0,sizeof(dp)); REP(i,as)REP(j,bs){ if(a[i]==b[j]){ dp[i+1][j+1]=max(dp[i+1][j+1],dp[i][j]+1); dp[as][bs]=max(dp[as][bs],dp[i+1][j+1]); } dp[i+1][j]=max(dp[i+1][j],dp[i][j]); dp[i][j+1]=max(dp[i][j+1],dp[i][j]); } cout<<dp[as][bs]<<endl; } return 0; }