NYOJ 1023 还是回文
还是回文
- 描述
-
判断回文串很简单,把字符串变成回文串也不难。现在我们增加点难度,给出一串字符(全部是小写字母),添加或删除一个字符,都会产生一定的花费。那么,将字符串变成回文串的最小花费是多少呢?
- 输入
- 多组数据
第一个有两个数n,m,分别表示字符的种数和字符串的长度
第二行给出一串字符,接下来n行,每行有一个字符(a~z)和两个整数,分别表示添加和删除这个字符的花费
所有数都不超过2000 - 输出
- 最小花费
- 样例输入
-
3 4
abcb
a 1000 1100
b 350 700
c 200 800 - 样例输出
-
900
- 上传者
- ACM_马振阳
-
解题:转载一下别人的思路。。。
dp[i][j]代表区间i到区间j成为回文串的最小代价,那么对于dp[i][j]有三种情况:
1、dp[i+1][j]表示区间i到区间j已经是回文串了的最小代价,那么对于s[i]这个字母,我们有两种操作,删除与添加,对应有两种代价,dp[i+1][j]+add[s[i]],dp[i+1][j]+del[s[i]],取这两种代价的最小值;
2、dp[i][j-1]表示区间i到区间j-1已经是回文串了的最小代价,那么对于s[j]这个字母,同样有两种操作,dp[i][j-1]+add[s[j]],dp[i][j-1]+del[s[j]],取最小值
3、若是s[i]==s[j],dp[i+1][j-1]表示区间i+1到区间j-1已经是回文串的最小代价,那么对于这种情况,我们考虑dp[i][j]与dp[i+1][j-1]的大小........
然后dp[i][j]取上面这些情况的最小值.........
先上挫一点的代码,可以AC的但是速度比较慢
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <climits>
#include <algorithm>
#include <cmath>
#define LL long long
using namespace std;
int dp[][];
int main() {
int m,len,i,j,a,b,temp,temp2;
char s[],t[];
int add[],del[];
while(~scanf("%d %d",&m,&len)) {
scanf("%s",s);
for(i = ; i < m; i++) {
scanf("%s %d %d",t,&a,&b);
add[t[]-'a'] = a;
del[t[]-'a'] = b;
}
for(i = len-; i >= ; i--){
for(j = i+; j < len; j++){
dp[i][j] = min(dp[i+][j]+del[s[i]-'a'],dp[i+][j]+add[s[i]-'a']);
temp = min(dp[i][j-]+del[s[j]-'a'],dp[i][j-]+add[s[j]-'a']);
dp[i][j] = min(dp[i][j],temp);
if(s[i] == s[j]) dp[i][j] = min(dp[i][j],dp[i+][j-]);
}
}
printf("%d\n",dp[][len-]);
}
return ;
}这个是优化的过代码。优化之后,速度真心快了很多啊。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <climits>
#include <algorithm>
#include <cmath>
#define LL long long
using namespace std;
int dp[][];
int main() {
int m,len,i,j,a,b,temp,temp2;
char s[],t[];
int cost[];
while(~scanf("%d %d",&m,&len)) {
scanf("%s",s);
for(i = ; i < m; i++) {
scanf("%s %d %d",t,&a,&b);
cost[t[]-'a'] = min(a,b);
}
for(i = len-; i >= ; i--){
for(j = i+; j < len; j++){
dp[i][j] = min(dp[i+][j]+cost[s[i]-'a'],dp[i][j-]+cost[s[j]-'a']);
if(s[i] == s[j]) dp[i][j] = min(dp[i][j],dp[i+][j-]);
}
}
printf("%d\n",dp[][len-]);
}
return ;
}
NYOJ 1023 还是回文的更多相关文章
- NYOJ 1023 还是回文(DP,花最少费用形成回文串)
/* 题意:给出一串字符(全部是小写字母),添加或删除一个字符,都会产生一定的花费. 那么,将字符串变成回文串的最小花费是多少呢? 思路:如果一个字符串增加一个字符 x可以形成一个回文串,那么从这个字 ...
- nyoj 1023——还是回文——————【区间dp】
还是回文 时间限制:2000 ms | 内存限制:65535 KB 难度:3 描述 判断回文串很简单,把字符串变成回文串也不难.现在我们增加点难度,给出一串字符(全部是小写字母),添加或删除一 ...
- Manacher算法 , 实例 详解 . NYOJ 最长回文
51 Nod http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1089 Manacher 算法 定义数组 p[i]表示以i为 ...
- nyoj 题目37 回文字符串
回文字符串 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba".当 ...
- NYOJ题目766回文数
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsgAAAHaCAIAAACSPygsAAAgAElEQVR4nO3dO3LqSheG4X8S5AyEWB ...
- [NYOJ 37] 回文字符串
回文字符串 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba".当 ...
- nyoj 37回文串
述所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba".当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串.现在要求你,给你一个字符串,可 ...
- nyoj 还是回文
还是回文 时间限制:2000 ms | 内存限制:65535 KB 难度:3 描述 判断回文串很简单,把字符串变成回文串也不难.现在我们增加点难度,给出一串字符(全部是小写字母),添加或删除一个字符, ...
- nyoj 回文字符串
回文字符串 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba".当 ...
随机推荐
- mvc 连接数据库但单复值得问题
1. The model backing the ‘MusicStoreDBContext‘ context has changed since the database was created. ...
- spark-wordcount-sample算子测试
import org.apache.spark.{SparkConf, SparkContext} object radomSampleU { def main(args: Array[String] ...
- IOS实现弹出菜单效果MenuViewController(背景 景深 弹出菜单)
在写项目时,要实现一个从下移上来的一个弹出菜单,并且背景变深的这么一个效果,在此分享给大家. 主要说一下思路及一些核心代码贴出来,要想下载源码, 请到:http://download.csdn.net ...
- iOS Category实现原理 (补充)
iOS Category实现原理 (补充) load 和 initialize load load方法会在程序启动就会调用,当装载类信息的时候就会调用. 调用顺序看一下源代码.在 objc-loadm ...
- 修改完linux bashrc文件之后,如何不重启系统使其生效
修改完后,输入如下命令即可 ##@##:~/ source ~/.bashrc 之后bashrc文件就可以使用! 注: 使用ssh登陆shell的时候,系统不会自动调用.bashrc文件, 只是 ...
- MyBatis插入数据之后返回插入记录的id
MyBatis插入数据的时候,返回该记录的id<insert id="insert" keyProperty="id" useGeneratedKeys= ...
- SAP不同的产品是如何支持用户创建自定义字段的
我们从SAP CRM,Cloud for Customer(简称C4C)和S/4HANA这三个产品分别来看看. SAP CRM 我们使用所谓的Application Enhancement Tool( ...
- osx launchpad图标的删除
安装了个parallels desktop之后,OSX中的launchpad中的图标多了不少,可是好多都不是我自己想要的,我们该怎么删除或者修改呢,下面介绍一些方法: ①直接操作Appications ...
- KissXML的XPath选取问题
XMPPFramework用的XML解析库还是大神自己写的KissXML,有些人生下来就是让人仰望的,哎. 进入主题,如下一段XML: <paramsxmlns="namespace& ...
- Latex 分块矩阵的处理
在 \(\mathrm{\LaTeX}\) 中,如果想输入类似的矩阵: 可以这样实现: \[ \left[ \begin{array}{cc|cc|c} \lambda & 0 & 1 ...