POJ 1458

LCS+滚动数组,处理滚动数组时候要细心,不幸贡献了一次WA

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

const int maxl= 1e3;

char sa[maxl], sb[maxl];
int la, lb;
int dp[maxl];

int main()
{
	while (EOF!= scanf("%s %s", sa+1, sb+1)){
		la= strlen(sa+1);
		lb= strlen(sb+1);

		memset(dp, 0, sizeof(dp));
		for (int i= 1; i<= la; ++i){
			int t= 0, tt= 0;
			for (int j= 1; j<= lb; ++j){
				t= tt;
				tt= dp[j];
				if (sa[i]== sb[j]){
					dp[j]= t+1;
				}
				else{
					dp[j]= max(dp[j], dp[j-1]);
				}
			}
		}

		cout<<dp[lb]<<endl;
	}

	return 0;
}
posted @ 2020-12-25 01:00  IdiotNe  阅读(72)  评论(0编辑  收藏  举报