便宜的回文串(区间DP)
题目链接:便宜的回文串

这道题刚开始其实还是没有思路的.没办法,只能看题解了...
其实我们在思考问题时,考虑到一段串增或减时会改变它的长度,所以转移时会麻烦...
但其实不用考虑那么多的问题,我们只需记录下那一段子串需要变成回文串的最小代价,然后之后直接把它当成回文串用即可.
那这里我们就可以总结一些东西,也就是如果题目要求变成目标序列时,即使会改变原序列长度,但我们不用在意,照常做,用时直接把它当成合法序列即可.
那就是区间DP了,但这里还要注意一个性质,就是在一个串中,要把它变成回文串,删和减是等价的,例:abca,可以加成abcba也可以减成aca,都是对b进行处理的,我们加减都行,所以这道题给的两个代价,只需取个min就行.
之后的就没什么了...
#include<bits/stdc++.h>
using namespace std;
int n,m,f[2100][2100];
char ch[2100];
map<char,int>mp;
inline int read()
{
int x=0,ff=1;
char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') ff=-1;ch=getchar();}
while(isdigit(ch)) {x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return x*ff;
}
int main()
{
freopen("1.in","r",stdin);
n=read();m=read();
for(register int i=1;i<=m;++i) cin>>ch[i];
for(register int i=1;i<=n;++i)
{
char ch;cin>>ch;
int a=read(),b=read();
mp[ch]=min(a,b);
}
memset(f,127,sizeof(f));
for(register int i=1;i<=m;++i) f[i][i]=0;
for(register int len=2;len<=m;++len)
{
for(register int l=1;l<=m-len+1;++l)
{
int r=l+len-1;
if(ch[l]==ch[r])
{
if(len==2) f[l][r]=0;
else f[l][r]=f[l+1][r-1];
}
else
{
f[l][r]=min(f[l][r],f[l+1][r]+mp[ch[l]]);
f[l][r]=min(f[l][r],f[l][r-1]+mp[ch[r]]);
}
}
}
printf("%d",f[1][m]);
return 0;
}
便宜的回文串(区间DP)的更多相关文章
- poj3280 Cheapest Palindrome(回文串区间dp)
https://vjudge.net/problem/POJ-3280 猛刷简单dp第一天第三题. 这个据说是[求字符串通过增减操作变成回文串的最小改动次数]的变体. 首先增减操作的实质是一样的,所以 ...
- uva 10453 【回文串区间dp】
Uva 10453 题意:给定字符串,问最少插入多少个字符使其变成回文串,并任意输出一种结果. 题解:和Uva 10739类似,这里是只能增加.类似定义dp[i][j]表示子串Si...Sj变为回文串 ...
- 关于回文串的DP问题
问题1:插入/删除字符使得原字符串变成一个回文串且代价最小 poj 3280 Cheapest Palindrome 题意:给出一个由m中字母组成的长度为n的串,给出m种字母添加和删除花费的代价,求让 ...
- 2018.06.29 洛谷P2890 [USACO07OPEN]便宜的回文(简单dp)
P2890 [USACO07OPEN]便宜的回文Cheapest Palindrome 时空限制 1000ms / 128MB 题目描述 Keeping track of all the cows c ...
- 【GDOI2016模拟3.15】基因合成(回文串+性质+DP)
[GDOI2016模拟3.15]基因合成 题意: 给一个目标串,要求从空串进行最少的操作次数变成目标串,操作有两种: 在串的头或尾加入一个字符. 把串复制一遍后反向接到串的末尾. 因为有回文操作,所以 ...
- 回文串 --- 动态dp UVA 11584
题目链接: https://cn.vjudge.net/problem/34398/origin 本题的大意其实很简单,就是找回文串,大致的思路如下: 1. 确定一个回文串,这里用到了自定义的chec ...
- nyoj 1023——还是回文——————【区间dp】
还是回文 时间限制:2000 ms | 内存限制:65535 KB 难度:3 描述 判断回文串很简单,把字符串变成回文串也不难.现在我们增加点难度,给出一串字符(全部是小写字母),添加或删除一 ...
- 1154 回文串划分(DP+Manacher)
1154 回文串划分 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 有一个字符串S,求S最少可以被划分为多少个回文串. 例如:abbaabaa,有多种划分方式. ...
- leetcode 730. 统计不同回文子序列(区间dp,字符串)
题目链接 https://leetcode-cn.com/problems/count-different-palindromic-subsequences/ 题意 给定一个字符串,判断这个字符串中所 ...
随机推荐
- JavaScript循环 — for、for/in、while、do/while
for 多次遍历代码块 const array = []for (var i = 0; i < 5; i++) { array.push(i)}console.log(array) // [0, ...
- 使用Git上传项目到GitHub仓库
GitHub账号注册很长时间了,但是没怎么上传过东西.今天学习如何利用Git工具将代码上传到GitHub,了解了一些常用命令 $ git config --global user.name " ...
- TP6出现错误 No input file specified.
解决办法是打开public下的.htaccess文件, 把:RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] 改为:RewriteRule ^(.*)$ index ...
- webpack线上和线下模式
区别: 1 线下模式代码没有压缩,source-map是全的,比较容易定位错误,调试方便 2 线上模式的代码是压缩的,文件小, 分开打包: 方式一:有点麻烦 在package.json文件 " ...
- centos linux服务器apache+mysql环境访问慢优化方法
查找软件安装目录:find / -name 软件名称 一.优化apache配置增加MaxClients的值 默认情况下,2.0及以上apache版本MaxClients的值为256,对于中大型应用访问 ...
- Nginx系列(1)- Nginx简介
公司产品出现瓶颈 公司项目刚上线的时候,并发量小,用户使用少,所以在低并发的情况下,一个jar包启动应用就够了,然后内部tomcat返回内容给用户 但是慢慢的,使用平台的用户越来越多,并发量慢慢增大了 ...
- Linux系列(6) - 常见目录
linux 一级目录有严格规定,脚本文件等放在root/home/tmp目录中,减少在根目录的操作 目录名称 作用 / 根目录 /bin 命令保存目录(普通用户就可以读取的命令); 根目录下的bin和 ...
- 为Python安装Redis库
为Python安装Redis库,登陆https://github.com/andymccurdy/redis-py 后点击Download ZIP下载安装包. 解压并安装: git clone htt ...
- GDOI2021划水记
Day0 上午有意志行,一大早就醒了,然后走了五个小时脚痛.中午洗澡,宿舍轮流看巨人最终话然后聊了一个小时? 下午老师带着我和全爷先开溜,宿舍好像很破旧还还没得充电,领了牌牌和斐爷去吃饭. 然后六点多 ...
- YbtOJ#593-木棍问题【费用流】
正题 题目链接:https://www.ybtoj.com.cn/contest/114/problem/3 题目大意 \(n*m\)的网格上有一些格子有木球,两个相邻木球直接可以有木棍. 两个\(L ...