UVa:10739 String to Palindrome
来源:互联网 发布:搜狗输入法网络不可用 编辑:程序博客网 时间:2024/05/16 07:41
其实对于一个字符串第一个和最后一个字符不同的情况下,只有三种操作,删除第一个,删除最后一个,或者替换其中一个。这样对应三种递归方式。当然如果第一个和最后一个相同,那么直接递归不包括这俩字符的串即可。
当只有一个字符或者两个字符而且成为回文的时候终止递归,返回值为0。
不难写。
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#define ll long long#define MAXN 1005#define INF 2139062143using namespace std;char str[MAXN];int dp[MAXN][MAXN];int L;int solve(int a,int b){ if(a<=b) { if(a==b||(a+1==b&&str[a]==str[b])) return dp[a][b]=0; if(dp[a][b]!=INF) return dp[a][b]; if(str[a]!=str[b]) { dp[a][b]=min(solve(a+1,b)+1,dp[a][b]); dp[a][b]=min(solve(a,b-1)+1,dp[a][b]); dp[a][b]=min(solve(a+1,b-1)+1,dp[a][b]); } else dp[a][b]=min(solve(a+1,b-1),dp[a][b]); return dp[a][b]; } return INF;}int main(){ int T,kase=0; scanf("%d",&T); while(T--) { scanf("%s",str); memset(dp,0x7f,sizeof(dp)); L=strlen(str)-1; int ans=solve(0,L); printf("Case %d: %d\n",++kase,ans); } return 0;}
0 0
- uva 10739 String to Palindrome
- uva 10739 String to Palindrome
- Uva - 10739 - String to Palindrome
- UVa 10739 - String to Palindrome
- uva 10739 String to Palindrome
- UVa 10739 - String to Palindrome
- UVA - 10739 String to Palindrome
- UVa:10739 String to Palindrome
- UVA 10739 String to Palindrome
- uva 10739 - String to Palindrome
- UVA - 10739 String to Palindrome
- UVA - 10739 String to Palindrome
- UVA 10739 - String to Palindrome
- UVa 10739 - String to Palindrome
- uva 10739 String to Palindrome
- UVA 10739 String to Palindrome
- UVa 10739 String to Palindrome String to Palindrome
- UVa 10739 - String to Palindrome 字符串dp
- OCP-1Z0-新051-61题版本-41
- 有用的技术网站
- 264 参考帧 list0 list1
- windows下查看进程和端口
- Linux内核学习四库全书
- UVa:10739 String to Palindrome
- C++ memset memcpy 等价于 C# Array.Clear Array.Copy
- 解决安装pymongo报错 ImportError: cannot import name MongoClient
- servlet 提高性能记录
- android之自定义适配器实现ListView
- 磁盘管理之五
- 平摊分均
- memcached操作分类
- 普通Java工程中调用Hibernate的8个执行步骤(properties做配置文件)