BZOJ1710: [Usaco2007 Open]Cheappal 廉价回文
len<=2000的字符串上,给出删掉和添加每种字符的花费,求把字符串变成回文串的最小花费。
首先每个字符添加和删除是一样的,因此花费在添加和删掉每个字符的花费中取小的。
如果每个字符的花费都是1,就是找最长回文串再用len减掉即可。(manacher!)
加了花费同理,就是找“最大权回文串”再用每个字符的花费总和减掉即可。
字符串上的区间DP,f[i][j]--区间[i,j]的最大权回文串的权
若s[i]=s[j]:f[i][j]=f[i+1][j-1]+2*v[s[i]],v[s[i]]表示字符s[i]的花费
若s[i]!=s[j]:f[i][j]=max(f[i+1][j],f[i][j+1])
注意dp顺序,从小区间到大区间。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
//#include<iostream>
using namespace std; int n,len;
#define maxs 2017
int f[maxs][maxs],v[],sum;
char s[maxs];
char c[];
int x,y;
int main()
{
scanf("%d%d",&n,&len);
scanf("%s",s);
for (int i=;i<=n;i++)
{
scanf("%s",c);
scanf("%d%d",&x,&y);
v[c[]-'a']=min(x,y);
}
memset(f,,sizeof(f));
sum=;
for (int i=;i<len;i++)
{
sum+=v[s[i]-'a'];
f[i][i]=v[s[i]-'a'];
}
for (int j=;j<len;j++)
for (int i=;i<len-j+;i++)
f[i][i+j]=s[i]==s[i+j]?f[i+][i+j-]+*v[s[i]-'a']:max(f[i+][i+j],f[i][i+j-]);
printf("%d\n",sum-f[][len-]);
return ;
}
BZOJ1710: [Usaco2007 Open]Cheappal 廉价回文的更多相关文章
- 【bzoj1710】[Usaco2007 Open]Cheappal 廉价回文
[bzoj1710][Usaco2007 Open]Cheappal 廉价回文 Description 为了跟踪所有的牛,农夫JOHN在农场上装了一套自动系统. 他给了每一个头牛一个电子牌号 当牛走过 ...
- BZOJ 1710: [Usaco2007 Open]Cheappal 廉价回文
Description 为了跟踪所有的牛,农夫JOHN在农场上装了一套自动系统. 他给了每一个头牛一个电子牌号 当牛走过这个系统时,牛的名字将被自动读入. 每一头牛的电子名字是一个长度为M (1 &l ...
- 1710: [Usaco2007 Open]Cheappal 廉价回文
Description 为 了跟踪所有的牛,农夫JOHN在农场上装了一套自动系统. 他给了每一个头牛一个电子牌号 当牛走过这个系统时,牛的名字将被自动读入. 每一头牛的电子名字是一个长度为M (1 & ...
- 【BZOJ】1710: [Usaco2007 Open]Cheappal 廉价回文
[算法]区间DP [题解]回文问题的套路做法:区间DP. f[i][j]表示区间i~j回文的最小代价,则有f[i][j]=min{①②③}. ①f[i+1][j]+min(a[s[i]],b[s[i] ...
- bzoj 1710: [Usaco2007 Open]Cheappal 廉价回文【区间dp】
只要发现添加一个字符和删除一个字符是等价的,就是挺裸的区间dp了 因为在当前位置加上一个字符x就相当于在他的对称位置删掉字符x,所以只要考虑删除即可,删除费用是添加和删除取min 设f[i][j]为从 ...
- bzoj1710【Usaco2007 Open】Cheappal 便宜回文
1710: [Usaco2007 Open]Cheappal 便宜回文 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 466 Solved: 262 ...
- LeetCode[5] 最长的回文子串
题目描述 Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...
- 最长回文子串-LeetCode 5 Longest Palindromic Substring
题目描述 Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...
- [LeetCode] Longest Palindrome 最长回文串
Given a string which consists of lowercase or uppercase letters, find the length of the longest pali ...
随机推荐
- ImageView控件
ImageView 显示图片 常用属性: src 要显示的图片 foreground 前景图 backgrund 背景图 alpha 透明度 clickable 是否可以点击 onClick ...
- CSS进阶:提高你前端水平的 4 个技巧
译者注:随着 Node.js .react-native 等技术的不断出现,和互联网行业的创业的层出不穷,了解些前端知识,成为全栈攻城师,快速的产出原型,展示你的创意,对程序员,尤其是在创业的程序员来 ...
- jQuery Validate自定义各种验证方法(转)
一.封装自定义验证方法-validate-methods.js /***************************************************************** j ...
- SqlServer 2008 创建测试数据
包含要点: 数据库的循环 . insert select 句式 . 随机数(rand()函数).绝对值(abs()函数) ) ) DECLARE @randomvalue float SET @s ...
- 分享一个开源的JavaScript统计图表库,40行代码实现专业统计图表
提升程序员工作效率的工具/技巧推荐系列 推荐一个功能强大的文件搜索工具SearchMyFiles 介绍一个好用的免费流程图和UML绘制软件-Diagram Designer 介绍Windows任务管理 ...
- H3C S5024P交换机 vlan实验
H3C S5024P交换机第二次vlan实验 实验1 与交换机端口G0/1和G0/2相连的PC1与PC2属于VLAN 1,与G0/3和G0/4相连的PC3和PC4属于VLAN 2,PC1.PC2.PC ...
- python基础一 day7 复习文件操作
read()原样输出 读取出来的是字符串类型 readline()输出一行 读取出来的是字符串类型 readlines()把每行文本作为一个字符串存入列表,并返回列表 打开方式: b以bytes类型打 ...
- WebSocket 学习笔记
WebSocket 学习笔记 来自我的博客 因为项目原因需要用到双工通信,所以比较详细的学习了一下浏览器端支持的 WebSocket. 并记录一些遇到的问题. 简介 WebSocket 一般是指浏览器 ...
- jquery-closest
1.closest() 本例演示如何通过 closest() 完成事件委托.当被最接近的列表元素或其子后代元素被点击时,会切换黄色背景: $( document ).bind("click& ...
- 如何使用MySQL一个表中的字段更新另一个表中字段
[本文出自:https://www.jb51.net/article/150323.htm] 这篇文章主要介绍了如何使用MySQL一个表中的字段更新另一个表中字段,需要的朋友可以参考下 1,修改1列 ...