我在uva上解决this问题。我发现了递归关系,它对于给定的测试用例非常有效。但是,没有记忆,它超过了时间限制。我缓存了值并返回了缓存(基本的memoization)。通过缓存,我得到的答案比最后两个测试用例的实际答案多1个。我无法理解可能是什么错误,因为如果你拿出缓存它会起作用。谢谢你的帮助。
代码:
#include<iostream>
using namespace std;
string a;
int n;
int dp[1005][1005];
int solve(int i, int j, int moves)
{
if(j<=i)
return dp[i][j] = moves;
if(dp[i][j]!=-1)
return dp[i][j];
if(a[i]==a[j])
return dp[i][j] = solve(i+1, j-1, moves);
else
return dp[i][j] = min(min(solve(i+1, j-1, moves+1), solve(i+1, j, moves+1)), solve(i, j-1, moves+1));
}
int main()
{
int T;
cin >> T;
while(T--)
{
cin >> a;
n = a.length();
memset(dp, -1, sizeof(dp));
int ans = solve(0, n-1, 0);
cout << ans << "\n";
}
}
预期的O / P: sadrulhabibchowdhury:8
我的输出:9