#include <iostream>
#include <cstdio>
using namespace std;
const int N = 1e3 + 5;
int f[N][N];
string str;
int dfs(int l, int r)
{
if (f[l][r])
return f[l][r];
if (l >= r)
return 0;
int res;
if (str[l] != str[r])
res = min(dfs(l, r-1)+1, dfs(l+1, r)+1);
else
res = dfs(l+1, r-1);
return f[l][r] = res;
}
int main()
{
cin >> str;
cout << dfs(0, str.size()-1);
return 0;
}
八仙过海
if (f[l][r])
return f[l][r];
这一步是什么意思啊?
防止重复计算吧
我想问一下最后dfs返回的为什么不是res ,或者是f[l][r],这样写为什么会超时,有点没捋清楚
记忆化搜索
## Orz