便宜的回文 (USACO 2007)(c++)
2019-08-21便宜的回文(USACO 2007)
题目描述
追踪每头奶牛的去向是一件棘手的任务,为此农夫约翰安装了一套自动系统。他在每头牛身上安装了一个电子身份标签,当奶牛通过扫描器的时候,系统可以读取奶牛的身份信息。目前,每个身份都是由一个字符串组成的,长度为M (1≤M≤2000),所有的字符都取自小写的罗马字母。
奶牛们都是顽皮的动物,有时她们会在通过扫描器的时候倒着走,这样一个原来身份为abcb的奶牛就可能有两个不同的身份了(abcb和bcba),而如果身份是abcba的话就不会有这个问题了。
约翰想改变奶牛们的身份,使他们不管怎么走读起来都一样。比如说,abcb可以在最后加个a,变成回文abcba;也可以在前面加上bcb,变成回文bcbabcb;或者去除字母a,保留的bcb也是一条回文。总之,约翰可以在任意位置删除或插入一些字符使原字符串变成回文。
不巧的是,身份标签是电子做的,每增加或删除一个字母都要付出相应的费用(0≤代价≤10000)。给定一头奶牛的身份标签和增加或删除相关字母的费用,找出把原来字符串变成回文的最小费用。注意空字符串也是回文。
输入格式
第一行:两个用空格分开的整数:N和M 第二行:一个长度恰好为M的字符串,代表初始的身份标签 第三行到第N+2行:每行为一个用空格分开的三元组:其中包括一个字符和两个整数,分别表示增加或删除这个字符的费用
输出格式
第一行:只有一个整数,表示改造这个身份标签的最小费用
样例
样例输入
3 4
abcb
a 1000 1100
b 350 700
c 200 800
样例输出
900
代码如下
- #include <cstdio>
- #include <iostream>
- #include <algorithm>
- #include <cmath>
- #include <cstring>
- #include <cstdlib>
- using namespace std;
- ],f[][];
- ];
- int main () {
- scanf ("%d%d",&cn,&n);
- scanf ();
- ;i<=cn;i++) {
- char ca;
- scanf (" %c",&ca);
- int x,y;
- scanf ("%d%d",&x,&y);
- ab[ca-'a']=min(x,y);
- }
- ;i<=n;i++) {
- ;j>;j--) {
- if (a[i]==a[j]) {
- f[j][i]=f[j+][i-];
- }
- else {
- f[j][i]=min(f[j+][i]+ab[a[j]-]+ab[a[i]-'a']);
- }
- }
- }
- cout << f[][n];
- ;
- }
分析
读入don't have too mach to say. 注意%c签的' '(空格);
定义:a[] 为牌号
ab[] 为牌号的最小价值 (因为不管是添加或删去,都应选价格最小的)
f[ j ][ i ] 为a[ j ] 到 a[ i ] 的最小价值
动态转移方程 :f[ j ][ i ]= f[ j+1 ][ i-1 ] (if (a[ i ] == a [ j ]) )
min(f[ j+1][ i ]+ad[ a[ j ]-'a'],f[ j ][ i-1 ]+ad[ a[i]-'a' ]) (if (a[ i ] != a[ j ])
初始化 : f [ i ] [ i ]=0 第i个共一个字符,一定是回文词,花费0
设
a | b | c | b | c |
1 | 2 | 3 | 4 | 5 |
若 j=2 && i=4 时 :
a [ i ]==a [ j ] 所以费用不用变动 f [j ][ i ]=f [j+1] [i -1] =f [3] [3]=0;
若 j=1 && i=5 :
a[ i ]!=a[ j ] 方案1:在f [ 2 ] [ 4 ] 的基础上 增删 a [ j ] 使其为 bcb 或 abcba
方案2:在f [ 2 ] [ 4 ] 的基础上 增删 a [ i ] 使其为 bcb 或 cbcbc
所以 f [ j ] [ i ]=min( f [ j+1 ] [ i ]+ab[ a[ j ]-'a'],f [ j ] [ i-1 ]+ab[ a[ i ]-'a']);
综上所述 :f [ 1 ] [ n ] 为解
便宜的回文 (USACO 2007)(c++)的更多相关文章
- 2018.06.29 洛谷P2890 [USACO07OPEN]便宜的回文(简单dp)
P2890 [USACO07OPEN]便宜的回文Cheapest Palindrome 时空限制 1000ms / 128MB 题目描述 Keeping track of all the cows c ...
- 便宜的回文串(区间DP)
题目链接:便宜的回文串 这道题刚开始其实还是没有思路的.没办法,只能看题解了... 其实我们在思考问题时,考虑到一段串增或减时会改变它的长度,所以转移时会麻烦... 但其实不用考虑那么多的问题,我们只 ...
- [DP]P2890 [USACO07OPEN]便宜的回文Cheapest Palindrome
题目翻译(借鉴自@ 神犇的蒟蒻) [问题描述] 追踪每头奶牛的去向是一件棘手的任务,为此农夫约翰安装了一套自动系统.他在每头牛身 上安装了一个电子身份标签,当奶牛通过扫描器的时候,系统可以读取奶牛的身 ...
- [USACO07OPEN]便宜的回文Cheapest Palindrome
字串S长M,由N个小写字母构成.欲通过增删字母将其变为回文串,增删特定字母花费不同,求最小花费. 题目描述见上 显然 这是一道区间DP 从两头DP,枚举长度啥的很套 ...
- [luoguP2890] [USACO07OPEN]便宜的回文Cheapest Palindrome(DP)
传送门 f[i][j] 表示区间 i 到 j 变为回文串所需最小费用 1.s[i] == s[j] f[i][j] = f[i + 1][j - 1] 2.s[i] != s[j] f[i][j] = ...
- 洛谷P2890 [USACO07OPEN]便宜的回文Cheapest Palindrome
题目链接: 点我 题目分析: 玄学\(dp\) 设\(val[s[i] - 'a' + 1]\)表示字母\(s[i]\)的花费 首先发现对于一个已经回文了的串\(s[i, j]\),在\(s[i - ...
- 洛谷 2890 [USACO07OPEN]便宜的回文Cheapest Palindrome
传送门 一道最简单的区间dp,然而我还是抄了题解. //Twenty #include<algorithm> #include<iostream> #include<cs ...
- bzoj1710【Usaco2007 Open】Cheappal 便宜回文
1710: [Usaco2007 Open]Cheappal 便宜回文 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 466 Solved: 262 ...
- 回文质数 USACO
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 15 ...
随机推荐
- 【bzoj3601】一个人的数论(莫比乌斯反演+拉格朗日插值)
传送门 题意: 求\[ \sum_{i=1}^{n}i^d[gcd(i,n)=1] \] 思路: 我们对上面的式子进行变换,有: \[ \begin{aligned} &\sum_{i=1}^ ...
- 初学JavaScript正则表达式(九)
分组:可以用 ( ) 来进行分组 一.Byron重复三次 Byron{3} --------- Byronnn 只是将紧挨着量词的字符重复 (Byron) ...
- alertmanager
alertmanager主要用于接收prometheus发送的告警信息: wget下载,解压, 配置alertmanager.yml,内容如下: 在prometheus文件下添加rules.yml内容 ...
- monkey和monkeyrunner的区别
简单来说: 1.monkey是在设备或模拟器直接运行adb shell命令生成随机事件来进行测试 2.monkeyrunner是通过API发送特定的命令和事件来控制设备 为了支持黑盒自动化测试的场景, ...
- python27期前端
第一天笔记:HTML:是一种标识性的语言css:层叠样式表是一种用来表现HTML等文件样式(效果)的计算机语言JavaScript:简称“JS”,是一种属于网络的脚本语言 常用来为网页添加各式各样的动 ...
- springboot项目jar包运行
springboot项目jar包运行 参考 Linux后台运行java的jar包 步骤 进入maven项目中,打包项目. mvn package -Dmaven.test.skip=true 运行ja ...
- 大宗商品交易与风险管理(CTRM)软件产品介绍
https://mp.weixin.qq.com/s/grA8MhryPfDB2PmBqsao4Q 从全球范围来看,大宗商品行业风险管理领域的主流软件产品是CTRM系列.CTRM是Commodity ...
- JPA简介
JPA的学习 JPA是Java Persistence API的简称,中文名Java持久层API.是Java EE5.0平台中Sun为了统一持久层ORM框架而制定的一套标准,注意是一套标准,而不是具体 ...
- ini_set()
ini_set ( string $varname , string $newvalue ) : string 设置指定配置选项的值.这个选项会在脚本运行时保持新的值,并在脚本结束时恢复. 参数 va ...
- Emgucv 4 下载、安装、配置
1.下载.安装 过程可查看之前Emgucv 3的说明:https://www.cnblogs.com/doget/p/7776377.html 安装完成后,安装目录下会生成如下文件及文件夹: 2.配置 ...