数位DP 回文序列 POJ-3280 Cheapest Palindrome
Cheapest Palindrome
[ POJ - 3280 ]
题目大意:
给定字符串s,长度为m,由n个小写字母组成。在s的任意位置增删字母,把它变成回文串,增删特定字母的花费不同,求最小花费
思路
定义状态dp[i][j]表示字符串s的子区间s[i, j]变成回文的最小花费
那么每次有三种情况:
- 如果s[i] == s[j], 那么dp[i][j] = dp[i + 1][j - 1]。
- 如果dp[i + 1][j]是回文串, 那么dp[i][j] = dp[i + 1][j] + w[i]。
- 如果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相关推荐
- POJ 3280 Cheapest Palindrome(DP 回文变形)
题目链接:http://poj.org/problem?id=3280 题目大意:给定一个字符串,可以删除增加,每个操作都有代价,求出将字符串转换成回文串的最小代价 Sample Input 3 4 ...
- POJ 3280 Cheapest Palindrome(DP)
题目链接 题意 :给你一个字符串,让你删除或添加某些字母让这个字符串变成回文串,删除或添加某个字母要付出相应的代价,问你变成回文所需要的最小的代价是多少. 思路 :DP[i][j]代表的是 i 到 j ...
- POJ 3280 Cheapest Palindrome
题目链接 题意 给定一个字符串,和修改每个字母(增加或删除)的花费,问最少花费使得构成回文串 AC 区间dp dp[ i ][ j ] 表示区间(i,j)最小的花费,从小区间推到大区间 两种情况: s ...
- POJ 3252 数位DP
链接: http://poj.org/problem?id=3252 题意: 给你一个区间l,r,求区间中有多少个数转化为二进制后1的个数大于等于0的个数 题解: 还是数位dp,不过多了前导0的判断 ...
- poj 3280 区间dp
poj 3280 题意:输入一个含n个字母的长度为m的字符串,接下来输入n个字母,每个字母后面两个整数,分别表示删掉这个字母的代价,和添加这个字母的代价,求把该字符串变成回文串的最小代价. //#in ...
- poj 3208 Apocalypse Someday 数位dp+二分答案
Apocalypse Someday Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 2203 Accepted: 11 ...
- HDU 6156 Palindrome Function 数位DP
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6156 题目描述: 求L~R所有的数的l~r进制的f(x), f(x) = 当前进制 如果回文串, f ...
- HDU - 6156 Palindrome Function(数位dp)
题目链接:点击查看 题目大意:给出一段区间 [ l , r ] ,问十进制下的 [ l , r ] 内在 k 进制下有多少个回文串 题目分析:对于每个进制下求数位 dp 即可,dp[ pos ][ l ...
- POJ - 3252 Round Numbers(数位dp)
题目链接:点击查看 题目大意:规定一个数如果二进制中0的个数大于等于1的个数,则这个数称为"整数",问闭区间a,b中有多少个整数 题目分析:数位dp,dp[pos][c0][c1] ...
最新文章
- Altium Designer圆形、椭圆形铺铜
- Create Geometry from WKT(转载)
- MySQL3次导入报错解决!
- 自旋表达的到底是什么?
- docker run与docker start的区别?
- 再谈 $* 和 $@ 在 Bash 中的表现
- 创建自已的sql函数
- [转] C#2010 在TreeView控件下显示路径下所有文件和文件夹
- java多线程---进程与线程
- C语言:动态爱心代码
- kindle刷机ttl_kindle paper white 2 (kpw) 无限重启救砖方法
- eNSP华为路由器与交换机连接
- win7上搭建ftp站点
- 未转变者服务器.id大全,Unturned未转变者Elver最新地图ID汇总 2021最新版ID大全[多图]...
- 【vbers】ibv_post_send|IBV_SEND_SOLICITED|RDMA
- 7-5 最佳情侣身高差
- English--基础知识点--6--非限制性定语从句
- android socket代理app,android socket客户端app
- Win7 各种语言包下载
- 掌握4C原则,设计高效的系统架构