Cheapest Palindrome [POJ3280] [区间DP] [经典]
一句话题意:每个字母添加和删除都相应代价(可以任意位置 增加/删除),求把原串变成回文串的最小代价
Description
保持对所有奶牛的跟踪是一项棘手的任务,因此农场主约翰已经安装了一个系统来实现自动化。他在每头奶牛身上安装了一个电子ID标签,系统将在奶牛经过扫描仪时读取。每个ID标记是从字母表中提取的一个字符串。
奶牛,它们是淘气的动物,有时试图通过倒着走来欺骗系统。如果一头奶牛的ID是“abcba”,那么无论她怎么走,它都能读到同样的东西,而拥有“abcb”的奶牛可能会注册为两个不同的ID(“abcb”和“bcba”)。
FJ希望改变奶牛的ID标签,这样无论奶牛走过哪个方向,他们都能读到同样的标签。例如,“abcb”可以通过在末尾添加“a”来改变,从而形成“abcba”,这样ID就会是一个回文串。更改ID的其他一些方法包括将三个字母“bcb”添加到“abcb”的开始,以获得ID“bcbabcb”或删除字母“a”以产生ID“bcb”。我们可以在字符串中的任意位置添加或删除字符,其长度比原来的字符串长或短。
不幸的是,ID标签是电子信息,每个字符插入或删除都有代价,这取决于要添加或删除的字符值。考虑到奶牛ID标签的内容以及插入或删除字母表中的每个字符的成本,找到更改ID标记的最小成本,从而满足FJ的需求。一个空的ID标签被认为满足了读取前后相同的要求。只有带有相关成本的字母才能添加到字符串中。
Input
Line 2: 这一行包含了组成初始ID字符串的M个字符
Lines 3..
N+2: 每行包含三个空间分隔的实体:输入字母和两个整数的字符,分别是添加和删除该字符的成本(Ci<=10000)。
Sample Input
3 4
abcb
a 1000 1100
b 350 700
c 200 800
Sample Output
900
Hint
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define RG register int
#define rep(i,a,b) for(RG i=a;i<=b;i++)
#define per(i,a,b) for(RG i=a;i>=b;i--)
#define inf (1<<30)
using namespace std;
int n,m;
int val[],dp[][];
char s[];
inline int read()
{
int x=,f=;char c=getchar();
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} void DP()
{
rep(k,,m)
{
for(RG i=,j=k;j<=m;j++,i++)
{
dp[i][j]=inf;
if(s[i]==s[j]) dp[i][j]=dp[i+][j-];
else
{
dp[i][j]=min(dp[i][j],dp[i+][j]+val[s[i]]);
dp[i][j]=min(dp[i][j],dp[i][j-]+val[s[j]]);
}
}
}
printf("%d",dp[][m]);
} int main()
{
char ch;int x,y;
n=read(),m=read();
scanf("%s",s+);
rep(i,,n) cin>>ch,x=read(),y=read(),val[ch]=min(x,y);
DP();
return ;
}
Cheapest Palindrome [POJ3280] [区间DP] [经典]的更多相关文章
- Cheapest Palindrome(区间DP)
个人心得:动态规划真的是够烦人的,这题好不容易写出了转移方程,结果超时,然后看题解,为什么这些题目都是这样一步一步的 递推,在我看来就是懵逼的状态,还有那个背包也是,硬是从最大的V一直到0,而这个就是 ...
- 【POJ - 3280】Cheapest Palindrome(区间dp)
Cheapest Palindrome 直接翻译了 Descriptions 给定一个字符串S,字符串S的长度为M(M≤2000),字符串S所含有的字符的种类的数量为N(N≤26),然后给定这N种字符 ...
- POJ 题目3280 Cheapest Palindrome(区间DP)
Cheapest Palindrome Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7148 Accepted: 34 ...
- 【POJ】3280 Cheapest Palindrome(区间dp)
Cheapest Palindrome Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10943 Accepted: 5 ...
- POJ 3280 Cheapest Palindrome(区间DP求改成回文串的最小花费)
题目链接:http://poj.org/problem?id=3280 题目大意:给你一个字符串,你可以删除或者增加任意字符,对应有相应的花费,让你通过这些操作使得字符串变为回文串,求最小花费.解题思 ...
- POJ3280 Cheapest Palindrome (区间DP)
dp[i][j]表示将字符串子区间[i,j]转化为回文字符串的最小成本. 1 #include<cstdio> 2 #include<algorithm> 3 #include ...
- POJ - 3280 Cheapest Palindrome 【区间dp】【非原创】
Keeping track of all the cows can be a tricky task so Farmer John has installed a system to automate ...
- POJ 3280 Cheapest Palindrome(区间dp)
dp[i][j]表示处理完i到j的花费,如果s[i] == s[j] 则不需要处理,否则处理s[i]或s[j], 对一个字符ch,加上ch或删掉ch对区间转移来说效果是一样的,两者取min. #inc ...
- POJ 3280 Cheapest Palindrome (区间DP) 经典
<题目链接> 题目大意: 一个由小写字母组成的字符串,给出字符的种类,以及字符串的长度,再给出添加每个字符和删除每个字符的代价,问你要使这个字符串变成回文串的最小代价. 解题分析: 一道区 ...
随机推荐
- 微信小程序--代码构成---JSON 配置
在上一章中,我们通过开发者工具快速创建了一个 QuickStart 项目.你可以留意到这个项目里边生成了不同类型的文件: .json 后缀的 JSON 配置文件 .wxml 后缀的 WXML 模板文件 ...
- OpenCV-Python入门教程5-阈值分割
一.固定阈值分割 import cv2 import matplotlib.pyplot as plt # 灰度图读入 img = cv2.imread('gradient.jpg', 0) # 阈值 ...
- Django_Admin操作
Django_Admin 创建Django_Admin 管理账户 D:\github\Django_Aadmin>python manage.py createsuperuser Usernam ...
- python--使用递归优雅实现列表相加和进制转换
咦,好像坚持了一段时间,感觉又有新收获啦. # coding: utf-8 class Stack: def __init__(self): self.items = [] # 是否为空 def is ...
- ASP.NET Web Api 2 接口API文档美化之Swagger
使用第三方提供的swgger ui 可有效提高 web api 接口列表的阅读性,并且可以在页面中测试服务接口. 但本人在查阅大量资料并进行编码测试后,发现大部分的swagger实例并不能有效运行.例 ...
- bzoj3992
题解: 求模素数 p 原根的方法:对 p-1 进行素因子分解,记pi为p-1的第i个因子,若恒有a^((p-1)/pi) mod p ≠ 1 成立,则 a 就是 p 的原根.(对于合数求原根,只需把 ...
- python之squid实现免费 IP代理 (windows win7 单机 本机 本地 正向代理 区分 HTTPS)
0.目录 1.思路2.windows安装3.相关命令行4.简单配置和初步使用5.问题:squid是否支持HTTPS6.问题:配置多个代理条目,相同ip不同port报错7.问题:根据代理请求区分HTTP ...
- python全栈开发day72-django之Form组件
一.ajax 1. 复习JSON 1. JSON是什么? 一种数据格式,和语言无关的数据格式. 2. Python里面转换 1. Python对象 --> 字符串 import json 字符串 ...
- spark批量写写数据到Hbase中(bulkload方式)
1:为什么大批量数据集写入Hbase中,需要使用bulkload BulkLoad不会写WAL,也不会产生flush以及split. 如果我们大量调用PUT接口插入数据,可能会导致大量的GC操作.除了 ...
- Berlekamp-Massey算法简单介绍
请阅读本文的同学们注意:之前这篇博客和所附代码有点问题,求的不一定是最短递推式,非常抱歉 看毛爷爷的论文大概断断续续看了一个月了,看得不是很懂,google了一波好像很快就看懂了,就先口胡一下这个算法 ...