POJ 3280 Cheapest Palindrome (DP)

POJ 3280 Cheapest Palindrome (DP)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。



Description

Keeping track of all the cows can be a tricky task so Farmer John has installed a system to automate it. He has installed on each cow an electronic ID tag that the system will read as the cows pass by a scanner. Each ID tag’s contents are currently a single string with length M (1 ≤ M ≤ 2,000) characters drawn from an alphabet of N (1 ≤ N ≤ 26) different symbols (namely, the lower-case roman alphabet).

Cows, being the mischievous creatures they are, sometimes try to spoof the system by walking backwards. While a cow whose ID is “abcba” would read the same no matter which direction the she walks, a cow with the ID “abcb” can potentially register as two different IDs (“abcb” and “bcba”).

FJ would like to change the cows’s ID tags so they read the same no matter which direction the cow walks by. For example, “abcb” can be changed by adding “a” at the end to form “abcba” so that the ID is palindromic (reads the same forwards and backwards). Some other ways to change the ID to be palindromic are include adding the three letters “bcb” to the begining to yield the ID “bcbabcb” or removing the letter “a” to yield the ID “bcb”. One can add or remove characters at any location in the string yielding a string longer or shorter than the original string.

Unfortunately as the ID tags are electronic, each character insertion or deletion has a cost (0 ≤ cost ≤ 10,000) which varies depending on exactly which character value to be added or deleted. Given the content of a cow’s ID tag and the cost of inserting or deleting each of the alphabet’s characters, find the minimum cost to change the ID tag so it satisfies FJ’s requirements. An empty ID tag is considered to satisfy the requirements of reading the same forward and backward. Only letters with associated costs can be added to a string.

Input

Line 1: Two space-separated integers:
N and
M

Line 2: This line contains exactly
M characters which constitute the initial ID string

Lines 3..
N+2: Each line contains three space-separated entities: a character of the input alphabet and two integers which are respectively the cost of adding and deleting that character.

Output

Line 1: A single line with a single integer that is the minimum cost to change the given name tag.

Sample Input

3 4
abcb
a 1000 1100
b 350 700
c 200 800

Sample Output

900

题意:一串字母序列。经过添加或删减某个字符使得序列成为回文,添加和删减都有花费,问花费最少多少。

设dp[i][j]为从i到j的花费。
dp[i][j] = min ( dp[i+1][j]+cost[i] , dp[i][j-1]+cost[j] );  ( a[i] != a[j] )
dp[i][j] = dp[i+1][j-1] ( a[i] == a[j] )
cost[]里存的就是每一个字符删减或者添加的较小的值,由于删掉a[i]和在j后面添加一个a[i]效果是一样的,仅仅需比較两者的花费谁更小

#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
using namespace std;
typedef long long LL;
const int MAX=0x3f3f3f3f;
int n,m,cost[30],dp[2007][2005];
char s[2005],cc[3];
int main()
{
    scanf("%d%d%s",&n,&m,s);
    for(int i=0;i<n;i++) {
        int xx,yy;
        scanf("%s %d %d",cc,&xx,&yy);
        cost[ cc[0]-'a' ] = min(xx,yy);
    }
    for(int j=1;j<m;j++)
        for(int i=j-1;i>=0;i--)
             if( s[i] == s[j] ) dp[i][j] = dp[i+1][j-1];
             else dp[i][j] = min( dp[i+1][j]+cost[ s[i]-'a' ] ,dp[i][j-1]+cost[ s[j]-'a' ] );
    printf("%d\n",dp[0][m-1]);
    return 0;
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117433.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【Cocos2d-x】Mac 在 Cocos2d-x 3.X 打包Android

    【Cocos2d-x】Mac 在 Cocos2d-x 3.X 打包Android

    2022年1月12日
    36
  • explain如何查看mysql_MySQL Explain详解[通俗易懂]

    explain如何查看mysql_MySQL Explain详解[通俗易懂]在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略…

    2022年10月18日
    2
  • 二元logistic回归模型——spss步骤

    二元logistic回归模型——spss步骤二元:因变量为二分类变量,且两个分类整合在一起的概率为1.(有效/无效;是/否)分析——回归——二元logistic——结果作为因变量——自变量作为协变量分类——设置分类变量(非连续变量)——变化量、第一个保存——概率、组成员选项:霍斯默-莱梅肖拟合优度、Exp(B)置信区间——在每一个步骤结果分析:(1)看霍斯默检验的显著性:sig/p>0.05表示拟合良好。(2)方程中的变量:B——系数sig——p值——显著性Exp(B)——OR值——优势比(高出一个单位,发生的概率高出多少

    2025年7月28日
    3
  • 安装windows教程_yarn初始化

    安装windows教程_yarn初始化安装nodejshttp://nodejs.cn/download/什么都不要点,无脑下一步!安装成功!设置环境变量打开自定义安装目录至出现以下内容将此目录添加到环境变量中测试在命令行运行,出现版本号则说明安装成功npm-v…

    2022年10月20日
    3
  • Bass库Mp3转wav、samplerate/channel修改[通俗易懂]

    Bass库Mp3转wav、samplerate/channel修改[通俗易懂]代码地址:https://download.csdn.net/download/qq_14931305/10803169Bass库官网:http://www.un4seen.com/Bass库参考文档:http://www.un4seen.com/doc/#bass/bass.html1.Bass库集成集成请参考我之前的博客:https://blog.csdn.net/qq_149…

    2022年8月31日
    2
  • idea打包jar没有主清单属性_maven库中有jar包,但是引入不到

    idea打包jar没有主清单属性_maven库中有jar包,但是引入不到推荐必看:https://blog.csdn.net/persistencegoing/article/details/84376427问题:springboot项目通过maven打包程序后,直接执行jar包时,控制台显示“没有主清单属性”。解决:在maven的pom文件中,编写maven-jar-plugin的插件,具体如下<plugin>&…

    2025年9月14日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号