hdu1159(DP)

最长公共子序列:用一个二维数组进行处,  注意处理初始边界的问题;

#include<iostream>
#include<string>
const int Max=1000;
int res[Max][Max];
using namespace std;
int main()
{

string str1,str2;
int len1,len2;
while(cin>>str1>>str2)
{
int i,j;
memset(res,0,sizeof(res));
len1=str1.length();
len2=str2.length();
for(i=0;i<len1;i++)
for(j=0;j<len2;j++)
{
if(j==0||i==0)//注意边界问题,
{
if(str1[i]==str2[j])
res[i][j]=1;
else
{
if(i==0&&j!=0)
res[i][j]=res[0][j-1];
if(j==0&&i!=0)
res[i][j]=res[i-1][0];
if(j==0&&i==0)
res[i][j]=0;////////////////////////////////////////////
}

}
else
{
if(str1[i]==str2[j])
res[i][j]=1+res[i-1][j-1];
else
res[i][j]=res[i][j-1]>res[i-1][j]?res[i][j-1]:res[i-1][j];
}
}

cout<<res[len1-1][len2-1]<<endl;

}
return 0;
}

 

posted @ 2012-03-26 17:18  orangeblog  阅读(197)  评论(0编辑  收藏  举报