经典的动态规划题目:
#include<iostream>
#include<stdio.h>
#include<cstring>
using namespace std;
int main()
{
char s1[205],s2[205];
int f[205][205];
while(scanf("%s%s",s1+1,s2+1)>0) //不写>0竟然会TLE
{
int len1=strlen(s1+1);
int len2=strlen(s2+1);
memset(f,0,sizeof(f));
for(int i=1;i<=len1;i++)
{
for(int j=1;j<=len2;j++)
{
if(s1[i]==s2[j])
f[i][j]=f[i-1][j-1]+1;
else
{
f[i][j]=f[i][j-1];
if(f[i][j]<f[i-1][j])
f[i][j]=f[i-1][j];
}
}
}
cout<<f[len1][len2]<<endl;
}
return 0;
}
本文通过一个具体的例子详细解析了动态规划的经典应用。利用二维数组记录两个字符串之间的最长公共子序列长度,通过迭代的方式逐步求解,最终输出最长公共子序列的长度。
223

被折叠的 条评论
为什么被折叠?



