UVA10739 String to Palindrome(区间DP + 递推)
来源:互联网 发布:手机换网络类型软件 编辑:程序博客网 时间:2024/04/29 15:22
Sample Input6tanbirahmedshahriarmanzoormonirulhasansyedmonowarhossainsadrulhabibchowdhurymohammadsajjadhossainSample OutputCase 1: 5Case 2: 7Case 3: 6Case 4: 8Case 5: 8Case 6: 8题意:给出一个字符串,可以添加删除字符,或替换字符,求把它变成回文的最少操作次数。dp[i][j]表示字符i到j位置上最少需要几步构成回文。分两种情况讨论: 1.str[i] == str[j],此时则直接用上一步的值进行更新这一步,即dp[i][j] = dp[i+1][j-1]2.str[i]!=str[j],此时可以有两种操作,替换,删除,状态转移方程为dp[i][j] = min(min(dp(i+1,j),dp(i,j-1),dp(i+1,j-1))动规#include <iostream>#include <algorithm>#include <stdio.h>#include <string.h>const int INF = 0x3f3f3f3f;using namespace std;int dp[1010][1010];int n,len;char str[1010];int main(){ int Case = 0; scanf("%d",&n); while(n --) { scanf("%s",str); len = strlen(str) - 1; memset(dp,0,sizeof(dp)); for(int i = len; i >= 0; i --) for(int j = i + 1; j <= len; j ++) if(str[i] == str[j]) dp[i][j] = dp[i+1][j-1]; else dp[i][j] = min(min(dp[i+1][j],dp[i][j-1]),dp[i+1][j-1]) + 1; printf("Case %d: %d\n",++ Case,dp[0][len]); } return 0;}记忆化搜索#include <iostream>#include <algorithm>#include <stdio.h>#include <string.h>const int INF = 0x3f3f3f3f;using namespace std;int dp[1010][1010];int n,len;char str[1010];int DFS(int x,int y){ if(x <= y) ///结束条件 { if(x == y || (x + 1 == y && str[x] == str[y])) { dp[x][y] = 0; return dp[x][y]; } if(dp[x][y] != INF) ///减枝 return dp[x][y]; if(str[x] == str[y]) dp[x][y] = min(dp[x][y],DFS(x + 1,y - 1)); else { if(DFS(x + 1,y) < dp[x][y]) dp[x][y] = DFS(x + 1,y); if(DFS(x,y - 1) < dp[x][y]) dp[x][y] = DFS(x,y-1); if(DFS(x + 1,y - 1) < dp[x][y]) dp[x][y] = DFS(x + 1,y - 1); dp[x][y] += 1; } return dp[x][y]; } return INF;}int main(){ int Case = 0; scanf("%d",&n); while(n --) { scanf("%s",str); len = strlen(str); memset(dp,INF,sizeof(dp)); printf("Case %d: %d\n",++ Case,DFS(0,len-1)); } return 0;}</span>
0 0
- UVA10739 String to Palindrome(区间DP + 递推)
- UVA10739 - String to Palindrome
- uva10739(String to Palindrome)
- uva10739 - String to Palindrome(简单动归)
- 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)
- POJ3280-区间dp或递推-Cheapest Palindrome
- uva 10739 String to Palindrome (dp)
- uva10739String to Palindrome(递推)
- Cheapest Palindrome(区间DP)
- Cheapest Palindrome(区间dp)
- 记忆化搜索dp(uva10739)
- uva_10739 - String to Palindrome (普通DP)
- UVa 10739 - String to Palindrome 字符串dp
- UVA 10739 String to Palindrome(dp)
- HTML5微信网页调用视频监控直播代码开放源码,需要的拿走
- Rect参数说明
- JNI官方文档翻译6-异常
- 构造函数有没有返回值?
- python通过get,post方式发送http请求和接收http响应的方法
- UVA10739 String to Palindrome(区间DP + 递推)
- 几种常用加密方式简要分析及建议
- 教你编译PHP7 (nginx+mysql+php7)
- ContentProvider
- item26控制heap对象的数量
- wireshark抓包
- std::string用法总结
- 关于iOS多线程的使用(主要是关于GCD的)
- JSP 标准标签库(JSTL)