对于我这个新手
动态规划这种不能用模版表述的东西
只能意会了 要真正的了解动态 规划 动态规划
首先附上代码
#include <iostream>
#include <stdio.h>
#include <iomanip>
#include <cmath>
#include <cstring>
#include <string>
using namespace std;
int main()
{
int d[500][500];
string a,b;
while(cin>>a>>b)
{
memset(d,0,sizeof(d));
int i,j;
int x,y;
x=strlen(&a[0]);
y=strlen(&b[0]);
for(i=1;i<=x;i++)
{
for(j=1;j<=y;j++)
{
if(a[i-1]==b[j-1]) d[i][j]=d[i-1][j-1]+1;
else d[i][j]=max(d[i-1][j],d[i][j-1]);
}
}
cout<<d[x][y]<<endl;
}
return 0;
}
一个算法不是真正的明白我是不会看了题解就放弃的
首先来个简单的辅助空间图
**一些脑袋不够用的可能看不懂
再来一张**
然后我们再详细一点
想必好多人都不知道这个矩阵里面数字的规律
也有很多人把这个规律看错了导致一只wr
让我首先用文字表述
第一行代表 纵行和第一列有一个公共序列
然后 重点来了
先看 4*4矩阵
矩阵中看到了 有三个数变成了三
首先 3,4 变成3是因为 四号和纵行的三号对应了 加一
然后下面的也是这样
为什么 4,4也是3呢
因为 这代表4*4 的矩阵中 有长度为3的公共子序列
然后 我们看3*4的矩阵 和4*6的矩阵中数字的意义
注意 每个矩阵都代表这个矩阵中找到的最大的序列
注意矩阵的范围和 矩阵中最后一个数字
还有每个和上一位不同的数字代表的意义
我们要学的是动态规划
不是解题的模版
动态
总不能讲完吧
留点东西自己想