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)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • JavaActivity工作流

    JavaActivity工作流一、什么是工作流以请假为例,现在大多数公司的请假流程是这样的员工打电话(或网聊)向上级提出请假申请——上级口头同意——上级将请假记录下来——月底将请假记录上交公司——公司将请假录入电脑采用工作流技术的公司的请假流程是这样的员工使用账户登录系统——点击请假——上级登录系统点击允许就这样,一个请假流程就结束了有人会问,那上级不用向公司提交请假记录?公司不用将记录录入电脑?答案

    2022年5月27日
  • 黄页网址大全推荐_常用的网站

    黄页网址大全推荐_常用的网站可以试试这个,https://tongcheng360.com页面干净整洁,页面使用缓存技术,打开速度非常快,包括公司简介,发布公司产品,发布公司新闻,公司如有特殊需求,可进行定制化开发,大大节省了公司的运维和开发成本并且具有同城分类信息的功能b站操作视频https://www.bilibili.com/video/BV1jy4y1L7Z1…

    2022年5月3日
  • 「旅游信息管理系统」 · Java Swing + MySQL 开发「建议收藏」

    「旅游信息管理系统」 · Java Swing + MySQL 开发「建议收藏」代码写得烂,写博客纯属记录!微信公众号:BugLass码云仓库地址:https://gitee.com/ynavc/tourism_sys源代码及文档打包下载:https://download.csdn.net/download/weixin_44893902/12819432目录一、需求简介:业务流程及系统概念模型如下:游客:业务管理员:旅游业务模型:整体概要设计:二、界面示例:首页:点击报名:如果没有登录提示游客登录登录界面:注册界面:..

    2022年4月28日
  • Android实战技巧:ViewStub的应用

    Android实战技巧:ViewStub的应用在开发应用程序的时候,经常会遇到这样的情况,会在运行时动态根据条件来决定显示哪个View或某个布局。那么最通常的想法就是把可能用到的View都写在上面,先把它们的可见性都设为View.GONE,然后在代码中动态的更改它的可见性。这样的做法的优点是逻辑简单而且控制起来比较灵活。但是

    2022年6月28日
  • uva 10825 – Anagram and Multiplication(暴力)

    uva 10825 – Anagram and Multiplication(暴力)

    2022年1月9日
  • mybatis的逆向工程怎么实现_列举创建连接的方法

    mybatis的逆向工程怎么实现_列举创建连接的方法Mybatis逆向工程创建方法1.首先利用数据库的可视化工具新建一张表。2.打开IDEA新建一个项目。3.导入pom.xml所需要的依赖文件。&amp;lt;?xmlversion=&quot;1.0&quot;encoding=&quot;UTF-8&quot;?&amp;gt;&amp;lt;projectxmlns=&quot;http://maven.apache.org/POM/4.0.0&quo

    2022年8月21日

发表回复

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

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