博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3280 Cheapest Palindrome
阅读量:7055 次
发布时间:2019-06-28

本文共 1647 字,大约阅读时间需要 5 分钟。

记忆化搜索,$dp$。

$dp[L][R]$表示将区间$[L,R]$修改为一个回文串需要的最小代价。转移很容易写,区间$dp$或者记忆化搜索都可以。

区间$dp$:

#include 
#include
#include
#include
#include
using namespace std;char s[2010],op[5];int dp[2010][2010];int c[30][2];int m,n;int main(){ while(~scanf("%d%d",&m,&n)) { scanf("%s",s); for(int i=0;i
=len) continue; if(x==2&&s[L]==s[R]) { dp[L][R]=0; continue; } if(s[L]==s[R]) dp[L][R] = min(dp[L][R],dp[L+1][R-1]); dp[L][R] = min(dp[L][R], dp[L+1][R]+c[s[L]-'a'][0]); dp[L][R] = min(dp[L][R], dp[L+1][R]+c[s[L]-'a'][1]); dp[L][R] = min(dp[L][R], dp[L][R-1]+c[s[R]-'a'][0]); dp[L][R] = min(dp[L][R], dp[L][R-1]+c[s[R]-'a'][1]); } } printf("%d\n",dp[0][n-1]); } return 0;}

记忆化搜索:

#include 
#include
#include
#include
#include
using namespace std;char s[2010],op[5];int dp[2010][2010];int c[30][2];int m,n,len;int dfs(int L,int R){ if(dp[L][R]!=0x7FFFFFFF) return dp[L][R]; if(R-L==0) dp[L][R]=0; else if(R-L==1&&s[L]==s[R]) dp[L][R]=0; else { int mn = 0x7FFFFFFF; if(s[L]==s[R]) mn = min(mn,dfs(L+1,R-1)); mn = min(mn , dfs(L+1,R)+c[s[L]-'a'][0]); mn = min(mn , dfs(L+1,R)+c[s[L]-'a'][1]); mn = min(mn , dfs(L,R-1)+c[s[R]-'a'][0]); mn = min(mn , dfs(L,R-1)+c[s[R]-'a'][1]); dp[L][R] = mn; } return dp[L][R];}int main(){ while(~scanf("%d%d",&m,&n)) { scanf("%s",s); for(int i=0;i

 

转载于:https://www.cnblogs.com/zufezzt/p/6816757.html

你可能感兴趣的文章
svn 版本管理与自动部分发布(转)
查看>>
php 上传图片
查看>>
Lambda表达式详解
查看>>
Visual Studio 2013复制项目
查看>>
基于Struts2框架实现登录案例 之 程序国际化
查看>>
php Hash Table(四) Hash Table添加和更新元素
查看>>
解决Clover在win 10下的兼容问题
查看>>
wxWidgets谁刚开始学习指南(5)——使用wxSmith可视化设计
查看>>
OAuth的机制原理讲解及开发流程(转)
查看>>
jquery插件-表单验证插件-rules
查看>>
window.parent ,window.top,window.self 详解
查看>>
web安全测试---AppScan扫描工具
查看>>
源码解析之–网络层YTKNetwork
查看>>
Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论
查看>>
参数判断
查看>>
md5sum校验文件完整性
查看>>
Excel中公式的绝对引用和相对引用单元格
查看>>
[uboot]E9-i.MX6Q-uboot移植
查看>>
Java中OutOfMemoryError(内存溢出)的三种情况及解决办法
查看>>
insert,update和delete下的注入
查看>>