dfs过了?
查看原帖
dfs过了?
704414
gzwjj楼主2024/7/29 10:39
#include <bits/stdc++.h>
using namespace std;

const int N = 1000 + 10, INF = 0x3f3f3f3f;
int f[N][N];
string s;
//记忆化搜索 
int dfs(int l, int r)//l, r代表前后字符 
{
	if (l > r) return 0;
	if ((r - l == 1 || r - l == 2) && s[l] == s[r]) return 0;//如果是回文,返回0 
	if (f[l][r] != INF) return f[l][r];//直接返回 
	int t = 0;
	if (s[l] == s[r]) t = dfs(l+1, r-1); //如果s[l] == s[r],不加任何东西,直接看里面一层
	else t = min(dfs(l+1, r-1) + 2, min(dfs(l+1, r) + 1, dfs(l, r-1) + 1));//可以选择把右边补上,左边补上或两边补上,取最小即可 
	f[l][r] = t;
	return t;
}

int main()
{
	memset(f, INF, sizeof(f));
	cin >> s;
	for (int i = 0; i < s.size(); i++) f[i][i] = 0; 
	cout << dfs(0, s.size()-1) << endl;
	return 0;
}
2024/7/29 10:39
加载中...