uva 10739(dp)
来源:互联网 发布:2k17樱木花道脸部数据 编辑:程序博客网 时间:2024/03/29 22:24
题意:给出一个字符串,可以增加一个字母或者删除一个字母,或者替换任何一个字母,都需要一次操作,问最少需要几次操作可以是字符串成为回文串。
题解:这三个操作中增加一个字符或删除一个字符作用是一样的,做法是从两边推到中间,先用两个指针指向两端,如果字符串最两边的字符是一样的可以直接左右指针加一减一向内推进,否则有三种情况,判断如果左边指针右移一位或者右边指针左移一位(相当于添加删除操作),或者是各向中间移动一位(相当于替换操作),选出最小值加一赋给f[i][j]数组,返回值f[i][j]。
#include <stdio.h>#include <string.h>const int INF = 0x3f3f3f3f;const int N = 1005;int t, cas = 1;char str[N];int f[N][N];int dp(int l, int r) {if (r - l < 1) {f[l][r] = 0;return 0; }if (f[l][r] != -1)return f[l][r];int temp = INF;if (str[l] == str[r])f[l][r] = dp(l + 1, r - 1);else {int temp1 = dp(l, r - 1);if (temp1 + 1 < temp)temp = temp1 + 1;temp1 = dp(l + 1, r);if (temp1 + 1 < temp)temp = temp1 + 1;temp1 = dp(l + 1, r - 1);if (temp1 + 1 < temp)temp = temp1 + 1;f[l][r] = temp;}return f[l][r];}int main() {scanf("%d", &t);getchar();while (t--) {memset(f, -1, sizeof(f));scanf("%s", str);int ans = dp(0, strlen(str) - 1);printf("Case %d: %d\n", cas++, ans);}return 0;}
0 0
- uva 10739(dp)
- UVA 10739 [classical dp]
- UVa 10739 - String to Palindrome 字符串dp
- UVA 10739 String to Palindrome(dp)
- uva 10739 String to Palindrome(dp)
- UVa 10739 String to Palindrome (DP)
- String to Palindrome - UVa 10739 dp
- UVA - 10739 String to Palindrome 区间DP
- UVA 10739 String to Palindrome(DP)
- UVA 10739--String to Palindrome +dp
- uva 10739 - String to Palindrome(区间dp)
- uva 10739 String to Palindrome (dp)
- uva 10453 回文串dp uva 10739 uva 11151最长回文串 poj 3280
- UVA DP 入门专题
- uva 1424 简单DP
- uva 10192 DP
- UVA dp题目汇总
- UVa 4256 - Salesmen dp
- JVM学习笔记四 :Class类文件结构
- 熙汇银的投资十大雷区
- 字母游戏
- 阅读高手编写的类似QQ聊天的服务端代码业务层设计总结
- android几种异步处理情况笔记 Handler类:
- uva 10739(dp)
- 设置上传图片在显示页面的宽度
- 处理大图片(1)
- 工厂模式
- 帆软报表最新版FineReport7.1.1发布
- Mat in OpenCV英文文档
- 按层次遍历二叉树
- 处理大图片(2)
- Git工作笔记