Cheapest Palindrome

[ POJ - 3280 ]


题目大意:

给定字符串s,长度为m,由n个小写字母组成。在s的任意位置增删字母,把它变成回文串,增删特定字母的花费不同,求最小花费

思路

定义状态dp[i][j]表示字符串s的子区间s[i, j]变成回文的最小花费

那么每次有三种情况:

  1. 如果s[i] == s[j], 那么dp[i][j] = dp[i + 1][j - 1]。
  2. 如果dp[i + 1][j]是回文串, 那么dp[i][j] = dp[i + 1][j] + w[i]。
  3. 如果dp[i][j - 1]是回文串, 那么dp[i][j] = dp[i][j - 1] + w[j]。

2, 3情况的状态转移方程就是dp[i][j] = min(dp[i + 1][j] + w[i], dp[i][j - 1] + w[j])

题解代码

#include<iostream>
#include<algorithm>
using namespace std;int w[30], dp[2010][2010];
char s[2010], ch;
int n, m;int main(void)
{int x, y;while (cin >> n >> m) {cin >> s;for (int i = 0; i < n; i++) {cin >> ch >> x >> y;w[ch - 'a'] = min(x, y);}for (int i = m - 1; i >= 0; i--) {      // i是子区间的起点for (int j = i + 1; j < m; j++) {   // j是子区间的终点if (s[i] == s[j])dp[i][j] = dp[i + 1][j - 1];elsedp[i][j] = min(dp[i + 1][j] + w[s[i] - 'a'], dp[i][j - 1] + w[s[j] - 'a']);}}cout << dp[0][m - 1] << endl;}return 0;
}

数位DP 回文序列 POJ-3280 Cheapest Palindrome相关推荐

  1. POJ 3280 Cheapest Palindrome(DP 回文变形)

    题目链接:http://poj.org/problem?id=3280 题目大意:给定一个字符串,可以删除增加,每个操作都有代价,求出将字符串转换成回文串的最小代价 Sample Input 3 4 ...

  2. POJ 3280 Cheapest Palindrome(DP)

    题目链接 题意 :给你一个字符串,让你删除或添加某些字母让这个字符串变成回文串,删除或添加某个字母要付出相应的代价,问你变成回文所需要的最小的代价是多少. 思路 :DP[i][j]代表的是 i 到 j ...

  3. POJ 3280 Cheapest Palindrome

    题目链接 题意 给定一个字符串,和修改每个字母(增加或删除)的花费,问最少花费使得构成回文串 AC 区间dp dp[ i ][ j ] 表示区间(i,j)最小的花费,从小区间推到大区间 两种情况: s ...

  4. POJ 3252 数位DP

    链接: http://poj.org/problem?id=3252 题意: 给你一个区间l,r,求区间中有多少个数转化为二进制后1的个数大于等于0的个数 题解: 还是数位dp,不过多了前导0的判断 ...

  5. poj 3280 区间dp

    poj 3280 题意:输入一个含n个字母的长度为m的字符串,接下来输入n个字母,每个字母后面两个整数,分别表示删掉这个字母的代价,和添加这个字母的代价,求把该字符串变成回文串的最小代价. //#in ...

  6. poj 3208 Apocalypse Someday 数位dp+二分答案

    Apocalypse Someday Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 2203   Accepted: 11 ...

  7. HDU 6156 Palindrome Function 数位DP

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6156 题目描述: 求L~R所有的数的l~r进制的f(x), f(x) = 当前进制 如果回文串, f ...

  8. HDU - 6156 Palindrome Function(数位dp)

    题目链接:点击查看 题目大意:给出一段区间 [ l , r ] ,问十进制下的 [ l , r ] 内在 k 进制下有多少个回文串 题目分析:对于每个进制下求数位 dp 即可,dp[ pos ][ l ...

  9. POJ - 3252 Round Numbers(数位dp)

    题目链接:点击查看 题目大意:规定一个数如果二进制中0的个数大于等于1的个数,则这个数称为"整数",问闭区间a,b中有多少个整数 题目分析:数位dp,dp[pos][c0][c1] ...

最新文章

  1. Altium Designer圆形、椭圆形铺铜
  2. Create Geometry from WKT(转载)
  3. MySQL3次导入报错解决!
  4. 自旋表达的到底是什么?
  5. docker run与docker start的区别?
  6. 再谈 $* 和 $@ 在 Bash 中的表现
  7. 创建自已的sql函数
  8. [转] C#2010 在TreeView控件下显示路径下所有文件和文件夹
  9. java多线程---进程与线程
  10. C语言:动态爱心代码
  11. kindle刷机ttl_kindle paper white 2 (kpw) 无限重启救砖方法
  12. eNSP华为路由器与交换机连接
  13. win7上搭建ftp站点
  14. 未转变者服务器.id大全,Unturned未转变者Elver最新地图ID汇总 2021最新版ID大全[多图]...
  15. 【vbers】ibv_post_send|IBV_SEND_SOLICITED|RDMA
  16. 7-5 最佳情侣身高差
  17. English--基础知识点--6--非限制性定语从句
  18. android socket代理app,android socket客户端app
  19. Win7 各种语言包下载
  20. 掌握4C原则,设计高效的系统架构

热门文章

  1. .NET Garbage-Collectors
  2. 关于css中overflow的一些理解
  3. Kali Linux Web***测试之 WebSploit
  4. SQL:EXISTS的用法理解(转)
  5. 通过shell将*.txt文本内容批量录入mysql
  6. MySQL02-升级
  7. 塞尔达传说顺序_编码《塞尔达传说》克隆图例
  8. unity开发入门_Unity游戏开发终极入门指南
  9. saas的计费数据库设计_如何构建和扩展SaaS计费解决方案
  10. 1010 Radix