还是回文

时间限制:2000 ms  |  内存限制:65535 KB
难度:3
 
描述

判断回文串很简单,把字符串变成回文串也不难。现在我们增加点难度,给出一串字符(全部是小写字母),添加或删除一个字符,都会产生一定的花费。那么,将字符串变成回文串的最小花费是多少呢?

 
输入
多组数据
第一个有两个数n,m,分别表示字符的种数和字符串的长度
第二行给出一串字符,接下来n行,每行有一个字符(a~z)和两个整数,分别表示添加和删除这个字符的花费
所有数都不超过2000
输出
最小花费
样例输入
3 4
abcb
a 1000 1100
b 350 700
c 200 800 解题思路:定义状态dp[i][j]为从i到j这段成为回文串所需的最小花费。由于状态这样定义所以想要得到的结果是dp[1][m]。那么状态转移方程就是
if(s[i]!=s[j]) dp[i][j]=min(dp[i+1][j]+cost[i],dp[i][j-1]+cost[j]) else dp[i][j]=dp[i+1][j-1]。那么我们就可以得到规划方向为j:i+1-->m,i:m-->1。这样结果就是从这两个方向转移过去的值。
#include<bits/stdc++.h>
using namespace std;
#define min(a,b) (a)<(b)?(a):(b)
const int maxn=2010;
int dp[maxn][maxn];
int cost[26];
int main(){
int n,m,i,j,k,a,b;
char s[maxn],ch[2];
while(scanf("%d%d",&n,&m)!=EOF){
scanf("%s",s+1);
for(i=0;i<n;i++){
scanf("%s%d%d",ch,&a,&b);
cost[ch[0]-'a']=min(a,b);
}
memset(dp,0,sizeof(dp));
for(i=m;i>=1;i--){ //规划方向不可随意变换,i从大到小
for(j=i+1;j<=m;j++){//j从小到大,把结果挤到角落,因为要的结果是dp[1][m]
if(s[i]!=s[j])
dp[i][j]=min(dp[i+1][j]+cost[s[i]-'a'],dp[i][j-1]+cost[s[j]-'a']);
else
dp[i][j]=dp[i+1][j-1];
}
}
printf("%d\n",dp[1][m]);
}
return 0;
}

  

nyoj 1023——还是回文——————【区间dp】的更多相关文章

  1. NYOJ 1023 还是回文(DP,花最少费用形成回文串)

    /* 题意:给出一串字符(全部是小写字母),添加或删除一个字符,都会产生一定的花费. 那么,将字符串变成回文串的最小花费是多少呢? 思路:如果一个字符串增加一个字符 x可以形成一个回文串,那么从这个字 ...

  2. HDU2205 又见回文(区间DP)

    题意:给定两个字符串(可能为空串),求这两个串交叉组成新串的子串中的回文串的最大长度. 布尔型变量dp[i][j][k][l]表示串a从i到j,b从k到l能否组成新串,初始化为false,则采取区间动 ...

  3. NYOJ 1023 还是回文

    还是回文 时间限制:2000 ms  |  内存限制:65535 KB 难度:3   描述 判断回文串很简单,把字符串变成回文串也不难.现在我们增加点难度,给出一串字符(全部是小写字母),添加或删除一 ...

  4. bzoj2084/luoguP3501 [Poi2010]Antisymmetry(回文自动机+dp)

    bzoj2084/luoguP3501 [Poi2010]Antisymmetry(回文自动机+dp) bzoj Luogu 对于一个01字符串,如果将这个字符串0和1取反后,再将整个串反过来和原串一 ...

  5. bzoj4044/luoguP4762 [Cerc2014]Virus synthesis(回文自动机+dp)

    bzoj4044/luoguP4762 [Cerc2014]Virus synthesis(回文自动机+dp) bzoj Luogu 你要用ATGC四个字母用两种操作拼出给定的串: 1.将其中一个字符 ...

  6. SCUT 125 :笔芯回文(DP)

    https://scut.online/p/125 125. 笔芯回文 题目描述 bxbx有一个长度一个字符串SS,bxbx可以对其进行若干次操作. 每次操作可以删掉一个长度为k(1 \leq k \ ...

  7. Manacher算法 , 实例 详解 . NYOJ 最长回文

    51 Nod http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1089 Manacher 算法 定义数组 p[i]表示以i为 ...

  8. 51nod 1092 回文字符串 (dp)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1092 这个题是poj-3280的简化版,这里只可以增加字符,设 dp[i ...

  9. bzoj 1138: [POI2009]Baj 最短回文路 dp优化

    1138: [POI2009]Baj 最短回文路 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 161  Solved: 48[Submit][Sta ...

随机推荐

  1. Vue 父组件向子组件传值,传方法,传父组件整体

    父子组件传值 1.父组件调用子组件时绑定属性,例如-> :title="title" 2.子组件中在props中声明title:props:['title','msg'] 3 ...

  2. Jquery 页面元素事件绑定

    场景: 用一个Table来展示数据信息列表,通过鼠标点击Table中的Tr来获取到当前选中的数据行信息. <table class="Table" width="1 ...

  3. 以太坊系列之十六:golang进行智能合约开发

    以太坊系列之十六: 使用golang与智能合约进行交互 以太坊系列之十六: 使用golang与智能合约进行交互 此例子的目录结构 token contract 智能合约的golang wrapper ...

  4. C# 根据论文 像素差异算法【个人实验还是比较好使的】

    论文地址:http://www.docin.com/p-1081596986.html 具体代码: 我转YUV,再通过上面的论文的方式比较近. YVU 介绍:https://blog.csdn.net ...

  5. 关联关系的接口+unittest实现关联接口

    关联关系的接口: import requests def login(): url = 'http://ip/api/user/login' data = {'username':'niuhang', ...

  6. 八大排序算法的python实现(八)简单选择排序

    代码: #coding:utf-8 #author:徐卜灵 # L = [6, 3, 2, 32, 5, 4] def Select_sort(L): for i in range(0,len(L)) ...

  7. python实现对象'+'操作符

    python对象实现__add__,__radd__方法即可实现'+'操作符 demo: # coding=utf-8 class Person(object): def __init__(self, ...

  8. 安装jdk1.8,编写环境变量

    好记性不如烂笔头!!!(我这是把jdk放在的/usr/local下,且命令为jdk1.8...复制的时候别搞错位置了) JAVA_HOME=/usr/local/jdk1./ JAVA_BIN=/us ...

  9. angular-ui-select 下拉框支持过滤单选多选解决方案(系列一)

    angular-ui-select  官方文档:github地址:https://github.com/angular-ui/ui-select 请大家多看文档     首先注意版本的问题,如果版本不 ...

  10. day--40 mysql-视图,触发器,存储过程,函数总结

    视图,触发器,存储过程,函数总结 一:视图 01:介绍 视图是一个虚拟表(非真实存在),是跑到内存中的表,真实表是硬盘上的表,怎么就得到了虚拟表,就是你查询的结果,只不过之 前我们查询出来的虚拟表,从 ...