https://vjudge.net/problem/POJ-3280

猛刷简单dp第一天第三题。

这个据说是【求字符串通过增减操作变成回文串的最小改动次数】的变体。

首先增减操作的实质是一样的,所以输入时求min。

dp[i][j]表示第i个字符到第j个字符中修改成回文串的最小代价。由于回文串的特殊性,这里两层循环的遍历方式跟常见的略有不同

这算是回文串dp的一种典型题目典型方法吧。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<queue>
 4 #include<cstring>
 5 #include<algorithm>
 6 #include<cmath>
 7 #include<map>
 8 #define lson l, m, rt<<1
 9 #define rson m+1, r, rt<<1|1
10 #define INF 0x3f3f3f3f
11 typedef unsigned long long ll;
12 using namespace std;
13 int n, m, a, b, dp[2010][2010];
14 map<char, int> mp;
15 char s[2010], c;
16 int main()
17 {
18     cin >> n >> m;
19     cin >> s;
20     for(int i = 0; i < n; i++){
21         cin >> c >> a >> b;
22         mp[c] = min(a, b);//因为增减操作的实质是一样的
23     }
24     for(int j = 0; j < m; j++){
25         for(int i = j-1; i >= 0; i--){//遍历方式要注意
26             if(s[i] == s[j]){
27                 dp[i][j] = dp[i+1][j-1];
28             }
29             else{
30                 dp[i][j] = min(dp[i+1][j]+mp[s[i]], dp[i][j-1]+mp[s[j]]);
31             }
32         }
33     }
34     cout << dp[0][m-1] << endl;
35     return 0;
36 }

转载于:https://www.cnblogs.com/Surprisezang/p/9027188.html

poj3280 Cheapest Palindrome(回文串区间dp)相关推荐

  1. 【leetcode】最长回文子串(区间dp)

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &qu ...

  2. 回文串 --- 动态dp UVA 11584

    题目链接: https://cn.vjudge.net/problem/34398/origin 本题的大意其实很简单,就是找回文串,大致的思路如下: 1. 确定一个回文串,这里用到了自定义的chec ...

  3. leetcode 131. 分割回文串(dp+回溯)

    给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 .返回 s 所有可能的分割方案. 回文串 是正着读和反着读都一样的字符串. 示例 1: 输入:s = "aab&quo ...

  4. 【LeetCode - 131】分割回文串(dp,dfs)

    题目链接:https://leetcode-cn.com/problems/palindrome-partitioning/ 题目: 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. ...

  5. bzoj 1710: [Usaco2007 Open]Cheappal 廉价回文【区间dp】

    只要发现添加一个字符和删除一个字符是等价的,就是挺裸的区间dp了 因为在当前位置加上一个字符x就相当于在他的对称位置删掉字符x,所以只要考虑删除即可,删除费用是添加和删除取min 设f[i][j]为从 ...

  6. 数位DP 回文序列 POJ-3280 Cheapest Palindrome

    Cheapest Palindrome [ POJ - 3280 ] 题目大意: 给定字符串s,长度为m,由n个小写字母组成.在s的任意位置增删字母,把它变成回文串,增删特定字母的花费不同,求最小花费 ...

  7. LeetCode 132. 分割回文串 II(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回符合要求的最少分割次数. 示例: 输入: "aab" 输出: ...

  8. 回文串分割:经典dp

    题目 做法 好题啊. 题目 lightoj 1044 Palindrome Partitioning 给出一个字符串,求最少把它分成多少个回文串. 做法 要求的时间复杂度是O(n2)O(n2)O(n^ ...

  9. AK F.*ing leetcode 流浪计划之回文串

    欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击. 文章目录 一.简介 二.解题步骤 三.作用 四.经典算法介绍 判断一个串是否为回文串(单次查询) 普通情况 判断指定字符 多次子 ...

最新文章

  1. 计算机实验书,[计算机软件及应用]实验书.doc
  2. Object C为UILabel添加点击事件
  3. 芝麻信用_别忘查看支付宝芝麻信用分,这些特权别浪费
  4. HDU - 6333 Problem B. Harvest of Apples(莫队变形+思维+组合数学,好题)
  5. HOJ 2678 Stars
  6. topcoder srm 698 div1 -3
  7. 外媒:华为曾大量采购联发科5G智能手机芯片天玑
  8. MPMoviePlayerController属性,方法,通知整理
  9. 关于在CLASSWIZARD中找不到工作区间中的类的解决方法
  10. sql 将8位字符串转换成日期型
  11. 主梁弹性模量计算_桥梁支座详解全攻略!图文+计算详解,值得收藏!
  12. oracle磁带库清洁带标签,LTO-1/2/3/4/5/6/7/8 Ultrium数据磁带 清洗带 清洁带 磁带标签批发...
  13. 前端中适配各种手机模式的一种解决办法
  14. rest api如何创建_我的宝宝走了一步,创建了一个REST API并进行了码头化
  15. 设计一个灵活、通用、方便的权限管理系统
  16. Dubbo-接口数据序列化Serialization
  17. 实现了一个简单的以图搜图功能(带代码)
  18. 赫尔维兹_勒奇超越函数(matlab自编函数)
  19. 最新IOS xcode12真机调试步骤
  20. 25岁同济硕士生斩获CVPR 2022 最佳学生论文奖

热门文章

  1. mysql 表 字符集_如何查看MySQL数据库/表/列的字符集?
  2. 【MYSQL笔记】复制删除和表和记录
  3. 开源安卓播放器:Dolphin Player 简单分析
  4. matlab butter 低通,matlab butter 用法
  5. java 综合练习_Java 之综合练习
  6. 吸顶灯怎么固定天花板_什么是吸顶灯?吸顶灯的材质和其与吊顶灯的区别分析...
  7. 【代码源 Div1 - 109】#454. Minimum Or Spanning Tree(最小生成树,边权按位或,贪心,并查集) CF1624G
  8. linux7删除网卡文件,CentOS 7下删除virbr0网卡信息
  9. mysql 小时数列,MySql时区问题
  10. 适合pythonpandas的软件_11个Python Pandas小技巧让你的工作更高效(附代码实例)