将给定字符串用最小代价(添加,删除)变为回文串。

dp:dp[i][j]表示将i-j变为回文串的最小代价。

若s[i]==s[j],则dp[i][j]=dp[i+1][j-1]

否则,若s[i+1]--s[j]是回文串,则dp[i][j]=min(dp[i+1][j]+add[i],dp[i][j])

     若s[i]--s[j-1]是回文串,则dp[i][j]=min(dp[i][j-1]+add[j],dp[i][j])

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
char s[],ch;
int n,m,a,b;
int add[],dp[][];
int main(){
scanf("%d%d",&n,&m);
scanf("%s",s);
for (int i=;i<=n;i++){
cin>>ch;
scanf("%d%d",&a,&b);
add[ch]=min(a,b);
}
for (int k=;k<m;k++)
for (int i=,j=k;j<m;i++,j++){
dp[i][j]=0x7fffffff;
if (s[i]==s[j]) dp[i][j]=dp[i+][j-];
else{
dp[i][j]=min(dp[i+][j]+add[s[i]],dp[i][j]);
dp[i][j]=min(dp[i][j-]+add[s[j]],dp[i][j]);
}
}
printf("%d\n",dp[][m-]);
return ;
}

poj3280的更多相关文章

  1. [poj3280]Cheapest Palindrome_区间dp

    Cheapest Palindrome poj-3280 题目大意:给出一个字符串,以及每种字符的加入代价和删除代价,求将这个字符串通过删减元素变成回文字符串的最小代价. 注释:每种字符都是小写英文字 ...

  2. poj3280 Cheapest Palindrome(回文串区间dp)

    https://vjudge.net/problem/POJ-3280 猛刷简单dp第一天第三题. 这个据说是[求字符串通过增减操作变成回文串的最小改动次数]的变体. 首先增减操作的实质是一样的,所以 ...

  3. 【POJ3280/洛谷2890】[Usaco2007 Open Gold]Cheapest Palindrome(动态规划)

    题目: POJ3280 洛谷2980 分析: 首先,考虑只可以加字的情况 设\(s[i]\)表示第\(i\)个字符,\(add[i]\)表示加上一个字母\(i\)的花费,\(dp[i][j]\)表示把 ...

  4. poj3280 区间dp

    //Accepted 15880 KB 250 ms #include <cstdio> #include <cstring> #include <iostream> ...

  5. POJ3280(DP)

    题目大意是说一个字符串,每插入或者删除一个字符都需要一定的代价,问怎样可以使这个字符串变成一个回文串,且花费最小. 首先明确的就是如果已经将区间[i,j]整理成为一个回文串(不管中间有多少个字符或者是 ...

  6. POJ3280 - Cheapest Palindrome(区间DP)

    题目大意 给定一个字符串,要求你通过插入和删除操作把它变为回文串,对于每个字符的插入和删除都有一个花费,问你把字符串变为回文串最少需要多少花费 题解 看懂题立马YY了个方程,敲完就交了,然后就A了,爽 ...

  7. poj3280(区间dp)

    题目连接:http://poj.org/problem?id=3280 题意:给定一个长度为m(m<=2000)的小写字母字符串,在给定组成该字符串的n(n<=26)个字符的添加和删除费用 ...

  8. Cheapest Palindrome [POJ3280] [区间DP] [经典]

    一句话题意:每个字母添加和删除都相应代价(可以任意位置 增加/删除),求把原串变成回文串的最小代价 Description 保持对所有奶牛的跟踪是一项棘手的任务,因此农场主约翰已经安装了一个系统来实现 ...

  9. POJ-3280

    Cheapest Palindrome Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10301   Accepted: 4 ...

随机推荐

  1. ABAP-表中数据的横向累加

    GLT0 等表中数据的横向累加 ——塞依SAP培训   在 ABAP 的 GLT0.FAGLFLEXT 等余额表中,用诸如 TSL01.TSL02 …… TSL16 等字段记录了 16 个期间的发生额 ...

  2. mvc中view与controll之间传递参数时,可以使用url进行传递

    mvc中view与controller之间传递参数时,可以使用url进行传递,但是在url的地址中需要加上“id=123”这样的东西才行. 具体如代码: window.location.href = ...

  3. 关于IE 浏览器的position居中定位的问题和 行块元素的设置问题

    这两天在写页面时,遇到一些IE浏览器显示不正常的问题,主要有两个: 1. 在td 中设置span 元素水平垂直居中,在谷歌浏览器中可以正常显示,但是在IE 中却无法显示出想要的结果,即不能实现垂直水平 ...

  4. Git如何在不提交当前分支的情况下切换到其它分支进行操作——git stash

    假如现在的Bug你还没有解决,而上边又给你派了一个新的Bug,而这个Bug相比较现在正在苦思冥想的Bug比较容易解决. 你想先解决新的Bug,可是之前的Bug还没有解决完而不能提交.怎么办? 解决方法 ...

  5. PHP对接微信支付采坑

    第一次做PHP商城项目对接微信支付接口,踩了N次坑,这也不对,那也不对,搞了很久,查了一些资料,终于实现了支付功能,小小总结一下,万一下次遇到就不用到处找资料了. 微信扫码支付 前期准备: 1.微信公 ...

  6. js方法用来获取路径传参上所带的参数

    //js方法用来获取路径传参上所带的参数 function GetQueryString(param) { var reg = new RegExp("(^|&)" + p ...

  7. linux网络日志分析

    1.清空日志的技巧 2.访问日志格式分析 3. web日志统计举例

  8. xcode项目打不开:incompatible project version问题

    低版本xcode打开高版本xcode项目或库工程的时候就会出现,打不开的问题 解决 1可以重建创建工程,将文件拷贝到新工程 2 相对一,较简单 找到.xcodeproj文件 右键 显示包内容,找到pr ...

  9. Xadmin弹出窗口

    Xadmin弹出窗口 需求分析: 1.在添加页面的一对多和多对多字段后面加上+,点击+后,能显示出添加相应字段的窗口 2.提交后窗口关闭,添加的内容显示到当前页面 1.判断出当前字段是否为Foreig ...

  10. 学习Hibernate的体会

    这个学期老师让我们做一个系统(服务器和客户端),语言自选,我也随大家开始学习java web 和android . 下面是我自学的一些体会和遇到的问题. 关于jar包. jsds.jar javasi ...