1 /*
 2    题意:给出一串字符(全部是小写字母),添加或删除一个字符,都会产生一定的花费。
 3    那么,将字符串变成回文串的最小花费是多少呢?
 4
 5    思路:如果一个字符串增加一个字符 x可以形成一个回文串,那么从这个字符串中删除这个字符 x
 6          同样也能形成回文串!
 7          所以我们只记录删除,和增加这个字符 x 的最小的费用就好了!->转变成添加多少个字符形成回文串费用最少!
 8
 9          str[i]!=str[k]
10          dp[i][j]=min(dp[i][j-1]+cost[str[k]-'a'], dp[i+1][j-1]+cost[str[i]-'a']) ;
11
12          str[i]==str[k]
13          dp[i][j]=dp[i+1][j-2];
14
15 */
16 #include<iostream>
17 #include<cstring>
18 #include<cstdio>
19 #include<algorithm>
20 #define N 2005
21 using namespace std;
22
23 int dp[N][N];
24
25 int cost[30];
26
27 char str[N];
28
29 int main(){
30     int m, n;
31     while(scanf("%d%d", &m, &n)!=EOF){
32         scanf("%s", str+1);
33         memset(cost, 0, sizeof(cost));
34         while(m--){
35            char ch;
36            int a, b;
37            getchar();
38            scanf("%c %d %d", &ch, &a, &b);
39            cost[ch-'a']=min(a, b);
40         }
41         for(int i=1; i<=n; ++i)
42            dp[i][1]=0;
43         for(int j=2; j<=n; ++j)
44            for(int i=1; i+j-1<=n; ++i){
45                int k=i+j-1;
46                if(str[i]!=str[k])
47                   dp[i][j]=min(dp[i][j-1]+cost[str[k]-'a'], dp[i+1][j-1]+cost[str[i]-'a']) ;
48                else dp[i][j]=dp[i+1][j-2];
49            }
50
51         printf("%d\n", dp[1][n]);
52     }
53     return 0;
54 } 

转载于:https://www.cnblogs.com/hujunzheng/p/3936088.html

NYOJ 1023 还是回文(DP,花最少费用形成回文串)相关推荐

  1. java最长回文子序列_LeetCode[5] - 最长回文子串动态规划

    题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: "bab" 注意: & ...

  2. 【花最少的时间、力气】Python并行计算

    [教你:如何花最少的时间学习,花最少的时间优化,就可以提高代码的运行速度呢?] Python中有全局解释器锁,他的直观含义是,一次只能处理一个线程.所以多线程是GG了,如果想要优化速度,应该是从多进程 ...

  3. [算法]如何花最少的钱购买蔬菜

    如何花最少的钱购买蔬菜 题目地址 题目描述 Description Rahul wanted to purchase vegetables mainly brinjal, carrot and tom ...

  4. 算法:如何花最少的钱购买蔬菜【动态规划】

    如何花最少的钱购买蔬菜 Description Rahul wanted to purchase vegetables mainly brinjal, carrot and tomato. There ...

  5. 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。...

    题目:一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. 思路:使用一个方法来判断这个数是否为回文数 打印出[10000,99999]之间所有的回文数 public ...

  6. 怎么判断一个字符串的最长回文子串是否在头尾_回文自动机入门

    缘起 回文自动机(Palindrome auto machine PAM,有些地方称之为回文树)是回文问题的大杀器~  本文使用一道很简单的题目入门这个精巧的数据结构. hdu 2163 Palind ...

  7. python判断回文数_python如何判断是不是回文数

    什么是回文数: 有这样一类数,他们顺着看和倒着看是相同的数,例如:12321,1221,2332等,这样的数字就称为:回文数. 例子:输入一个5位数,判断它是不是回文数.即12321是回文数,个位与万 ...

  8. 花最少钱购买阿里云服务器符合备案条件的云服务器配置

    在阿里云备案需要购买一台符合备案条件的云服务器,阿里云服务器备案条件为:中国大陆地域.包年包月计费模式.有公网带宽,最低购买3个月时长,阿里云服务器网根据这些要求,找到了一款云服务器66.9元即可搞定 ...

  9. 回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)

    栈与队列习题:回文是指正读反读均相同的字符序列,如"abba"和"abdba"均是回文,但"good"不是回文.试写一个算法判定给定的字符向 ...

最新文章

  1. 《大话数据结构》样章试读
  2. 读取excel文件错误
  3. Docker数据卷(Volume)
  4. C++ 高级数据类型(一)—— 数组
  5. python2.7虚拟环境
  6. (转)用@Resource注解完成属性装配
  7. spring学习--引入外部文件,初始化属性
  8. Matlab连接字符串的方法
  9. 开机提示grub可咋办啊
  10. 一步步教你批量压缩打包文件夹
  11. win10中Charles从下载安装到证书设置和雷电模拟器或浏览器中抓包测试
  12. 小程序源码:修复登录大河盲盒小程序源码,实现运营“玩法自由”,超多功能的盲盒型抽奖挖矿程序源码下载
  13. 京东云申元庆:用创新技术改变中国,顺道改变世界
  14. Terra Gate 安装
  15. 不同的「火」在舌頭上的表現也不一樣
  16. SECTION 24 面向对象编程(三)
  17. 小型企业服务器型号齐全,【一般小企业内部使用什么样子的服务器性价比比较高?】...
  18. 【git】出现Merge Conflict,解冲突
  19. DIV CSS 鼠标事件
  20. linux进程及网络报告,linux网络和进程管理简述

热门文章

  1. nacos 持久化 mysql(windows/linux环境)
  2. Sentinel 基于Nacos规则持久化-推模式
  3. linux 统计当前目录下文件或者文件夹的数量
  4. js提交java后台,双引号转义为quot;解决办法……StringEscapeUtils.unescapeHtml4完美解决
  5. Linux部署Web应用程序超链接下载中文名称文件404问题解决办法
  6. 企业实战07:Oracle数据库_查询语句
  7. vue 单文件组件中,输入template 按 tab 键不能自动补全标签的解决办法
  8. android studio打包纯H5项目(集成5+SDK)
  9. MySQL工具名字_MySQL客户端工具及SQL讲解
  10. C语言 *p++/*(p)++/*(p++)/*p++ - C语言零基础入门教程