Uva 10739

题意:给定字符串,可以增加、删除、修改任意字符,问最少经过多少次操作使字符串回文。

题解:定义dp[l][r]表示把从l到r的子串Sl...Sr变成回文串需要操作的最少次数。字符可以增删改,有的博客说增删是一样的,有的说增比删开销大,我倾向于后者,但前者是对的。因为显然s[l]==s[r]时,dp[l][r]=dp[l+1][r-1];当两者不相等时,可以删去s[l]或者s[r],状态转移到dp[l+1][r]+1或dp[l][r-1]+1,但是增加怎么加?一样的,在状态dp[l][r-1]的左边添加's[l-1]'=s[r],或在状态dp[l+1][r]的右边添加's[r+1]'=s[l],画图看看,这和删除确实一样;自然,也可以把s[l],s[r]修改成相同的,状态转移到dp[l+1][r-1]+1。

直接循环里dp:

  

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std; int dp[][];
char s[]; int Min(int a,int b,int c)
{
int t=min(a,b);
return min(t,c);
} int main()
{
int T;
cin>>T;
for(int cas=;cas<=T;cas++)
{
cin>>s;
int len=strlen(s);
for(int i=;i<len;i++) dp[i][i]=;
for(int i=len-;i>=;i--){
for(int j=i+;j<len;j++){
if(s[i]==s[j]) dp[i][j]=dp[i+][j-];
else dp[i][j]=Min(dp[i+][j],dp[i][j-],dp[i+][j-])+;
}
}
cout<<"Case "<<cas<<": "<<dp[][len-]<<endl;
}
return ;
}

或者记忆化搜索(dfs):

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std; int dp[][];
char s[]; int dfs(int l,int r)
{
if(dp[l][r]!=-) return dp[l][r];
if(l>=r) return dp[l][r]=;
if(s[l]==s[r])
dp[l][r]=dfs(l+,r-);
else
dp[l][r]=min(dfs(l+,r-),min(dfs(l+,r),dfs(l,r-)))+;
return dp[l][r];
} int main()
{
int T;
cin>>T;
for(int cas=;cas<=T;cas++)
{
cin>>s;
int len=strlen(s);
memset(dp,-,sizeof(dp));
cout<<"Case "<<cas<<": "<<dfs(,len-)<<endl;
}
return ;
}

最新文章

  1. [No0000A7]批处理经常用到的变量及批处理&gt;NUL详细介绍
  2. [转]大数据时代,python竟是最好的语言?
  3. 一些对新手有用的css技巧
  4. The Flat Dictionary
  5. HorizontalScrollView做页卡的一个小记录
  6. ubuntu 搭建python2.x 抓取环境
  7. Chapter 2 Open Book——21
  8. Web开发资料
  9. Hbase集群监控
  10. Part 4:表单和类视图--Django从入门到精通系列教程
  11. IOS开发之XCode学习011:UISwitch控件
  12. 【52ABP实战教程】00-- ASP.NET CORE系列介绍
  13. Linux 系统的总管 Systemd
  14. 自学python 2.
  15. Notepad++安装json插件
  16. Boolean类型
  17. Android中textView自动识别电话号码,电子邮件,网址(自动加连接)
  18. 英特尔近日发布最新版实感™ SDK R5 (v7)
  19. 更简单更全的material design状态栏
  20. ios 开发之旅

热门文章

  1. 第03章 科学计算库Numpy
  2. Luogu P1948 [USACO08JAN]电话线Telephone Lines(最短路+dp)
  3. processlist
  4. JAVA面试常见问题之进程和线程篇
  5. window 导入sql 防止乱码
  6. REM布局计算,移动端,pc端有兼容性)
  7. Spring事务传播行为详解
  8. jeecg流程梳理学习
  9. 详谈Windows消息循环机制
  10. JavaScript 面试:什么是纯函数?