【bzoj1710】[Usaco2007 Open]Cheappal 廉价回文

Description

为了跟踪所有的牛,农夫JOHN在农场上装了一套自动系统. 他给了每一个头牛一个电子牌号 当牛走过这个系统时,牛的名字将被自动读入. 每一头牛的电子名字是一个长度为M (1 <= M <= 2,000) 由N (1 <= N <= 26) 个不同字母构成的字符串.很快,淘气的牛找到了系统的漏洞:它们可以倒着走过读 码器. 一头名字为”abcba”不会导致任何问题,但是名为”abcb”的牛会变成两头牛(“abcb” 和 “bcba”).农 夫JOHN想改变牛的名字,使得牛的名字正读和反读都一样.例如,”abcb”可以由在尾部添加”a”.别的方法包 括在头上添加”bcb”,得到”bcbabcb”或去掉”a”,得到”bcb”.JOHN可以在任意位置添加或删除字母.因为名字 是电子的,添加和删除字母都会有一定费用.添加和删除每一个字母都有一定的费用(0 <= 费用 <= 10,000). 对与一个牛的名字和所有添加或删除字母的费用,找出修改名字的最小的费用.空字符串也是一个合法的名字.

Input

* 第一行: 两个用空格分开的数, N 和 M.

* 第二行: M个自符,初始的牛的名字.

* 第3…N+2行: 每行含有一个字母和两个整数,分别是添加和删除这个字母的费用.

Output

一个整数, 改变现有名字的最小费用.

Sample Input

3 4
abcb
a 1000 1100
b 350 700
c 200 800
输入解释:
名字是 “abcb”, 操作费用如下:
添加 删除
a 1000 1100
b 350 700
c 200 800

Sample Output

900
输出解释:
在尾部添加”a”得到”abcba”的费用为1000. 删除头上的”a”,得到”bcb”的费用为1100.在头上添加”bcb”可以得到最小费用,350+200+350=900.

题解

加入一个数可以视为删除一个数,那么问题转化为删数回文串

n^2dp即可

 #include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#define F(i,j,n) for(int i=j;i<=n;i++)
#define D(i,j,n) for(int i=j;i>=n;i--)
#define ll long long
#define maxn 2005
using namespace std;
char s[maxn],ch;
int m,n,x,y;
int f[maxn][maxn],w[];
inline int read()
{
int x=,f=;char ch=getchar();
while (ch<''||ch>''){if (ch=='-') f=-;ch=getchar();}
while (ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int main()
{
m=read();n=read();
scanf("%s",s+);
F(i,,m)
{
scanf("%c",&ch);while (ch<'a'||ch>'z') scanf("%c",&ch);
x=read();y=read();
w[ch-'a']=min(x,y);
}
D(i,n-,) F(j,i+,n)
{
f[i][j]=min(f[i+][j]+w[s[i]-'a'],f[i][j-]+w[s[j]-'a']);
if (s[i]==s[j]) f[i][j]=min(f[i][j],f[i+][j-]);
}
printf("%d\n",f[][n]);
}

【bzoj1710】[Usaco2007 Open]Cheappal 廉价回文的更多相关文章

  1. BZOJ1710: [Usaco2007 Open]Cheappal 廉价回文

    len<=2000的字符串上,给出删掉和添加每种字符的花费,求把字符串变成回文串的最小花费. 首先每个字符添加和删除是一样的,因此花费在添加和删掉每个字符的花费中取小的. 如果每个字符的花费都是 ...

  2. BZOJ 1710: [Usaco2007 Open]Cheappal 廉价回文

    Description 为了跟踪所有的牛,农夫JOHN在农场上装了一套自动系统. 他给了每一个头牛一个电子牌号 当牛走过这个系统时,牛的名字将被自动读入. 每一头牛的电子名字是一个长度为M (1 &l ...

  3. 1710: [Usaco2007 Open]Cheappal 廉价回文

    Description 为 了跟踪所有的牛,农夫JOHN在农场上装了一套自动系统. 他给了每一个头牛一个电子牌号 当牛走过这个系统时,牛的名字将被自动读入. 每一头牛的电子名字是一个长度为M (1 & ...

  4. 【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] ...

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

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

  6. bzoj1710【Usaco2007 Open】Cheappal 便宜回文

    1710: [Usaco2007 Open]Cheappal 便宜回文 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 466  Solved: 262 ...

  7. LeetCode[5] 最长的回文子串

    题目描述 Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...

  8. 最长回文子串-LeetCode 5 Longest Palindromic Substring

    题目描述 Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...

  9. [LeetCode] Longest Palindrome 最长回文串

    Given a string which consists of lowercase or uppercase letters, find the length of the longest pali ...

随机推荐

  1. show processlist使用介绍

    这个命令中最关键的就是state列,mysql列出的状态主要有以下几种: Checking table 正在检查数据表(这是自动的).Closing tables 正在将表中修改的数据刷新到磁盘中,同 ...

  2. SnowKiting 2017/1/24

    原文 Let's go fly a kite...in the snow Your snowkiting checklist To snowkite safely,you'll need a litt ...

  3. codevs 爱改名的小融

    都是三道水题 但我很难理解的是 string 能过 char 就WA 2967 题目描述 Description Wikioi上有个人叫小融,他喜欢改名. 他的名字都是英文,只要按顺序出现R,K,Y三 ...

  4. (五)maven之外置maven

    eclipse外置maven eclipse内置的maven插件是固定版本,如果要用其他版本的maven,可以使用外置maven. ①    在菜单栏上点击“Windows”à“Preferences ...

  5. C++通讯录

    C++通讯录1.0 历时一天,终于把通讯录写好了. 项目要求: 编写一个通讯录管理程序. 有一已存在的通讯录文件,数据内容为各联系人信息. 每个联系人信息的组成部分为: 姓名.电话号码和住址 等个人基 ...

  6. mysql利用binlog恢复数据详细例子

    模拟数据恢复的案例 有些时候脑瓜就会短路,难免会出错 场景:在生产环境中,我们搭建了mysql主从,备份操作都是在从备份数据库上 前提:有最近一天或者最近的全备 或者最近一天相关数据库的备份 最重要的 ...

  7. Node.js连接mysql报加密方式错误解决方案

    本人在学习全栈开发过程中做一个Node的web项目在连接本地MySQL8.0版本的数据库时,发现Navicat连接不上,它报了一个数据库的加密方式导致连接不上的错误,错误如下: MySQL8.0版本的 ...

  8. 爬虫_python3_抓取猫眼电影top100

    使用urllib,request,和正则表达式,多线程进行秒抓,以及异常处理结果: import urllib,re,json from multiprocessing import Pool#多进程 ...

  9. OpenCV2:直方图

    一.简介 在一个单通道的灰度图像中,每个像素的值介于0(黑色)~255(白色)之间,灰色图像的直方图有256个条目(或称为容器)

  10. 几种常用库在CentOS下的编译

    1操作环境 通过命令查看操作系统版本信息: [root@localhost ~]# cat /proc/version Linux version 3.10.0-327.el7.x86_64 (bui ...