luogu P2890 便宜的回文
来源:互联网 发布:c语言编程汉诺塔 编辑:程序博客网 时间:2024/04/27 14:47
题目连接: https://www.luogu.org/problem/show?pid=2890
这个题的题解比较少;
首先,这个题我一上来就想到了一道白皮上的DP;
那道题的转移方程是
if(a[i]==b[j]) f[i][j]=f[i-1][j-1];
else f[i][j]=min(f[i-1][j],f[i][j-1])+1;
大概就是当前a串字母和b串字母相同时,等价于前一个位置相同;
否则就改变其中的一个,求最小值;
那这道题可以说是有相同之处;
如果s[i]==s[j],f[i][j]=f[i+1][j-1];
就是说如果i,j这两个位置相同,那没必要去增加或删减;
最小值为之前i-1,j-1为回文串的最小值;
否则 我们明确f[i-1][j]和f[i][j-1]已经是回文串的最小值了;
那么只需要看看收尾两个字母是增加某一个还是删减某一个更优;
所以转移方程也就有了;(详见代码);
枚举顺序也要注意是左端点倒着枚举;
我的博客:http://blog.csdn.net/pretend_fal
cpp
#include<iostream>#include<cstdio>#include<algorithm>#define II int#define C char#define R register#define I 2050using namespace std;II n,m;II add[I], del[I], f[I][I];string s;int main(){// freopen("1.in","r",stdin); scanf("%d%d",&n,&m); cin>>s; for(R II i=1;i<=n;i++) { R C a; while (scanf("%c",&a)!=EOF&&(a==' '||a=='\n')); scanf("%d%d",&add[a],&del[a]); } for(R II r=1;r<m;r++) { for(R II l=r-1;l>=0;l--) { if(s[l]==s[r]) f[l][r]=f[l+1][r-1]; else { R II a1=f[l][r-1]+min(del[s[r]],add[s[r]]); R II a2=f[l+1][r]+min(del[s[l]],add[s[l]]); f[l][r]=min(a1,a2); } // 因为l+1,所以要求f[l][r]时,f[l+1][r]已经求出来了; // 所以l倒着枚举; } } printf("%d\n",f[0][m-1]); exit(0);}
by pretend_fal
END;
阅读全文
0 0
- luogu P2890 便宜的回文
- Cheapest Palindrome(最便宜的回文)
- luogu P1015 回文数
- 好便宜的电脑
- 技术交流是便宜的
- 便宜
- 超便宜的游泳地
- 最便宜的免费网游
- 幸福真的很便宜
- 网络购物便宜的有道理
- 是不是超级便宜的旅行!
- 最便宜的VPS服务器
- 求第三便宜的帽子
- luogu P1217 [USACO1.5]回文质数 Prime Palindromes
- Luogu-3805 (Manacher 最长回文子串)(模板)
- luogu的第一个任务
- luogu【P1025】数的划分
- Luogu P2799 国王的魔镜
- 硬货 | 一文了解深度学习在NLP中的最佳实践经验和技巧
- Web-Scale Training for Face Identification
- 【OpenCV3.3】编译源码并搭建VS2017+Windows开发环境
- 计算机网络学习入门
- PopWindow封装
- luogu P2890 便宜的回文
- World怎么去掉 某一文本框中的 红色或蓝色下划线
- 7-32 哥尼斯堡的“七桥问题”(25 分)
- 计算机网络(哈尔滨工业大学Mooc)
- leetcode 174. Dungeon Game 一个逆着推导计算的DP动态规划问题
- Spring Boot 实现最简单的 Security
- 按钮+pager+Xlistview
- linux shell脚本截取字符串的八种方式
- LinuxGPIO驱动使用其实很简单