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;
}
原文地址:https://www.cnblogs.com/orangeblog/p/2418234.html