UVA 10739 String to Palindrome

来源:互联网 发布:王源父母知乎 编辑:程序博客网 时间:2024/06/04 20:13

点击打开题目链接

dp[i][j] 表示使序列从下标 i 到下标 j 变成回文所需要的最小操作次数

有图有真相:


#include <cstdio>#include <cstring>#include <iostream>using namespace std;const int maxn = 1000 + 5;char A[maxn];int dp[maxn][maxn];int main(){int T, kase = 1;scanf("%d", &T);while (T--){scanf("%s", A);int len = strlen(A);for (int i = 0; i < len; i++)for (int j = 0; j < len; j++)dp[i][j] = 0;for (int  i = len - 1; i >= 0; i--) //状态转移,相同直接转移 for (int j = i + 1; j < len; j++)//不同的话取三种方案中最小的 {if (A[i] == A[j]) dp[i][j] = dp[i + 1][j - 1];else dp[i][j] = min(min(dp[i][j - 1], dp[i + 1][j]), dp[i + 1][j - 1]) + 1;}printf("Case %d: %d\n", kase++, dp[0][len - 1]);}    return 0;}


0 0