便宜的回文 (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 ...
随机推荐
- 2. Vue - 初始
一.vue简单介绍 1. vue定义 vue是一套用于构建用户界面的渐进式框架.vue被设计为可自底向上逐层应用,vue的核心只关注视图层:vue的特点是数据驱动视图,可直接修改数据,不用再手动编 ...
- C++学习一 结构与结构体
结构体属于C++与C区别之一. 代码例子如下(来自<C++程序设计>): #include <iostream> #include <string> using n ...
- Maven中使用tomcat:run出现错误org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException
配置是正常的.查阅资料以后说是jdk版本什么的问题.多方修改没有任何改观.换一个思路去查询tomcat:run怎么运行. 是因为他还是沿用了上一次的tomcat插件(默认是6)所以运行的时候使用 to ...
- 剑指Offer-9.变态跳台阶(C++/Java)
题目: 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 分析: 假设我们要求跳上第3级的跳法,可以从第0级跳3级台阶到达,也可以从第1级 ...
- Python之爬虫-校花网
Python之爬虫-校花网 #!/usr/bin/env python # -*- coding:utf-8 -*- import re import requests # 拿到校花网主页的内容 re ...
- c#DateTime与unix时间戳互相转换
public class UnixTimeUtil { /// <summary> /// 将dateTime格式转换为Unix时间戳 /// </summary> /// & ...
- Harbor + Https 部署
关闭防火墙和selinux systemctl stop firewalld sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selin ...
- java.sql.SQLException: Could not establish connection to 192.168.8.111:10000/default: java.net.ConnectException: Connection refused: connect at org.apache.hadoop.hive.jdbc.HiveConnection.<init>(HiveC
java.sql.SQLException: Could not establish connection to 192.168.8.111:10000/default: java.net.Conne ...
- Vue.js安装及环境搭建
Vue.js环境搭建-Windows版 步骤一:安装node.js 在搭建vue的开发环境之前,需要先下载node.js,vue的运行是要依赖于node的npm的管理工具来实现,node可以在官网或者 ...
- 【洛谷5437】【XR-2】约定(拉格朗日插值)
[洛谷5437][XR-2]约定(拉格朗日插值) 题面 洛谷 题解 首先发现每条边除了边权之外都是等价的,所以可以考虑每一条边的出现次数. 显然钦定一条边之后构成生成树的方案数是\(2*n^{n-3} ...