题目翻译(借鉴自@ 神犇的蒟蒻)

【问题描述】

追踪每头奶牛的去向是一件棘手的任务,为此农夫约翰安装了一套自动系统。他在每头牛身
上安装了一个电子身份标签,当奶牛通过扫描器的时候,系统可以读取奶牛的身份信息。
目前,每个身份都是由一个字符串组成的,长度为M (1 ≤ M ≤ 2000),所有的字符都取自N个
小写字母。奶牛们都是顽皮的动物,有时它们会在通过扫描器的时候倒着走,这样一个原来身份为
abcb 的奶牛就可能有两个不同的身份了(abcb 和 bcba),而如果身份是 abcba 的话就不会有这个
问题了。约翰想改变奶牛们的身份,使他们不管怎么走读起来都一样。比如说,abcb可以在最后加个 a,变成回文 abcba;也可以在前面加上 bcb,变成回文 bcbabcb;或者去除字母 a,保留的 bcb 也是一条回文。总之,约翰可以在任意位置删除或插入一些字符使原字符串变成回文。不巧的是,身份标签每增加或删除一个字母都要付出相应的费用(0 ≤ 费用代价 ≤ 10000)。给定一头奶牛的身份标签和增加或删除相关字母的费用,找出把原来字符串变成回文字符串的最小费用。注意空字符串也是回文。

【输入】

第一行:两个用空格分开的整数:N和M。
第二行:一个长度恰好为M的字符串,代表初始的身份标签。
第三行到第N + 2行:每行为一个用空格分开的三元组:其中包括一个字符和两个整数,分别
表示增加或删除这个字符的费用。

【输出】

只有一个整数,表示改造这个身份标签的最小费用。

当然,原文可见 传送门
这里是代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,m,a[2001],w[27];
int dp[2001][2001];
int main() {
    /*
        设[l,r]为已经求得最优解的子串,若使[l,r+1]也为回文字串有
            i. 删除[l,r+1]中的a[l+r]字符
            ii. 在[l,r]的左边加上一个a[l+r]字符
          故最小花费为min(del[a[r+1]],add[a[r+1]])
          同理可得,使[l-1,r]的最小花费为min(del[a[l-1]],add[a[l-1]])
          并且,若在a[l-1]==a[r+1]可以确定[l-1,r+1]在[l,r]的基础上不需要花费。
    */
    char in;
    scanf("%d%d\n",&n,&m);
    for(int i=1; i<=m; i++) {
        scanf("%c",&in);
        a[i]=in-'a';
    }
    for(int i=1,x1; i<=n; i++) {
        scanf("\n%c",&in),in-='a';
        scanf("%d%d",&w[in],&x1);
        if(x1<w[in]) w[in]=x1;
    }
    memset(dp,0x3f,sizeof dp);
    for(int i=1; i<=m; i++) {
        dp[i][i]=0;
        if(a[i]==a[i+1]) dp[i][i+1]=0;
    }
    for(int ln=1; ln<=m; ln++) {
        for(int l=1,r; l+ln-1<=m; l++) {
            r=l+ln-1;
            if(a[l-1]==a[r+1]) dp[l-1][r+1]=min(dp[l-1][r+1],dp[l][r]);
            dp[l-1][r]=min(dp[l-1][r],dp[l][r]+w[a[l-1]]);
            dp[l][r+1]=min(dp[l][r+1],dp[l][r]+w[a[r+1]]);
        }
    }
    printf("%d\n",dp[1][m]);
    return 0;
}

太棒了。。

[DP]P2890 [USACO07OPEN]便宜的回文Cheapest Palindrome的更多相关文章

  1. 洛谷P2890 [USACO07OPEN]便宜的回文Cheapest Palindrome

    题目链接: 点我 题目分析: 玄学\(dp\) 设\(val[s[i] - 'a' + 1]\)表示字母\(s[i]\)的花费 首先发现对于一个已经回文了的串\(s[i, j]\),在\(s[i - ...

  2. [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] = ...

  3. [USACO07OPEN]便宜的回文Cheapest Palindrome

    字串S长M,由N个小写字母构成.欲通过增删字母将其变为回文串,增删特定字母花费不同,求最小花费.        题目描述见上            显然 这是一道区间DP 从两头DP,枚举长度啥的很套 ...

  4. 洛谷 2890 [USACO07OPEN]便宜的回文Cheapest Palindrome

    传送门 一道最简单的区间dp,然而我还是抄了题解. //Twenty #include<algorithm> #include<iostream> #include<cs ...

  5. 2018.06.29 洛谷P2890 [USACO07OPEN]便宜的回文(简单dp)

    P2890 [USACO07OPEN]便宜的回文Cheapest Palindrome 时空限制 1000ms / 128MB 题目描述 Keeping track of all the cows c ...

  6. 便宜的回文串(区间DP)

    题目链接:便宜的回文串 这道题刚开始其实还是没有思路的.没办法,只能看题解了... 其实我们在思考问题时,考虑到一段串增或减时会改变它的长度,所以转移时会麻烦... 但其实不用考虑那么多的问题,我们只 ...

  7. (最长回文子串 线性DP) 51nod 1088 最长回文子串

    输入一个字符串Str,输出Str里最长回文子串的长度. 回文串:指aba.abba.cccbccc.aaaa这种左右对称的字符串. 串的子串:一个串的子串指此(字符)串中连续的一部分字符构成的子(字符 ...

  8. 便宜的回文 (USACO 2007)(c++)

    2019-08-21便宜的回文(USACO 2007) 内存限制:128 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 追踪每头奶牛的去向是一件棘手的任 ...

  9. 算法——回文(palindrome)

    回文(palindrome):指的是从头读到尾与从尾读到头一模一样的字符串. 分别在C.Java与Python实现回文检测: C: #include <stdio.h> #include ...

随机推荐

  1. 谦先生的bug日志之hive启动权限问题

    上海尚学堂谦先生的bug日志之hive启动权限问题 这几天开始做新老集群的迁移,今天开始对hive的所有数据进行迁移,主要是表的元信息和表数据.表的元信息我们存在mysql中,跟hive的服务器并不在 ...

  2. Appium python自动化测试系列之Android知识讲解(三)

    ​3.1 ADB工具讲解 3.1.1 什么是ADB呢? 我们不去解释官方语言的翻译,给大家说一个通熟易懂的说法,ADB我理解为他就是电脑和手机连接的桥梁.此连接不是充电的连接,大家不要混淆,说他是一个 ...

  3. Httpd2.2常见配置及功能

    Httpd 2.2常见配置 要配置http服务的配置文件,先备份一下,养成良好习惯,如果误操作导致http服务起不来,就可以将备份的主配置文件重新覆盖一下 httpd配置文件的组成:有三大部分组成,其 ...

  4. 写了一个bug,最后却变成了feature,要不要修呢?

    事情是这样子的,前不久接到一个需求,为一个游戏开发礼包码功能 通常一款游戏运营期间会搞各种各样的活动吸引玩家,其中最常见的就是发放礼包,  玩家可以通过礼包码兑换礼包. 用礼包码兑换礼包有个一限制,游 ...

  5. Vue源码后记-其余内置指令(3)

    其实吧,写这些后记我才真正了解到vue源码的精髓,之前的跑源码跟闹着玩一样. go! 之前将AST转换成了render函数,跳出来后,由于仍是字符串,所以调用了makeFunction将其转换成了真正 ...

  6. 不定期更新的CSS样式设置

    头像图片的样式 假设这是一个头像图片,假设展示头像的框为100*100的div,而图片尺寸为510*765,如何让图片显示成这样呢? html结构很简单: <div class="im ...

  7. Unity3d 2017

    Unity3d引擎的新纪元--Unity3d 2017 来源 http://blog.csdn.net/dark00800/article/details/75209544 Unity3d不久之前正式 ...

  8. I - Intersection HDU - 5120(圆环相交面积)

    Matt is a big fan of logo design. Recently he falls in love with logo made up by rings. The followin ...

  9. 附录三 关于book.h

    本书中用到的公用函数放到了头文件book.h中. #ifndef __BOOK_H__ #define __BOOK_H__ #include <stdio.h> #include < ...

  10. ios video标签部分mp4文件无法播放的问题

    问题描述: 部分MP4文件在ios的微信浏览器中无法播放,点击播放后缓冲一下之后显示叉,而另外一些mp4文件正常,同时在安卓全部下正常. 分析: h264编码的压缩级别问题导致. 苹果官方文档中对 i ...