【bzoj1710】[Usaco2007 Open]Cheappal 廉价回文

Description

为了跟踪所有的牛,农夫JOHN在农场上装了一套自动系统. 他给了每一个头牛一个电子牌号 当牛走过这个系统时,牛的名字将被自动读入. 每一头牛的电子名字是一个长度为M (1 <= M <= 2,000) 由N (1 <= N <= 26) 个不同字母构成的字符串.很快,淘气的牛找到了系统的漏洞:它们可以倒着走过读 码器. 一头名字为”abcba”不会导致任何问题,但是名为”abcb”的牛会变成两头牛(“abcb” 和 “bcba”).农 夫JOHN想改变牛的名字,使得牛的名字正读和反读都一样.例如,”abcb”可以由在尾部添加”a”.别的方法包 括在头上添加”bcb”,得到”bcbabcb”或去掉”a”,得到”bcb”.JOHN可以在任意位置添加或删除字母.因为名字 是电子的,添加和删除字母都会有一定费用.添加和删除每一个字母都有一定的费用(0 <= 费用 <= 10,000). 对与一个牛的名字和所有添加或删除字母的费用,找出修改名字的最小的费用.空字符串也是一个合法的名字.

Input

* 第一行: 两个用空格分开的数, N 和 M.

* 第二行: M个自符,初始的牛的名字.

* 第3…N+2行: 每行含有一个字母和两个整数,分别是添加和删除这个字母的费用.

Output

一个整数, 改变现有名字的最小费用.

Sample Input

3 4
abcb
a 1000 1100
b 350 700
c 200 800
输入解释:
名字是 “abcb”, 操作费用如下:
添加 删除
a 1000 1100
b 350 700
c 200 800

Sample Output

900
输出解释:
在尾部添加”a”得到”abcba”的费用为1000. 删除头上的”a”,得到”bcb”的费用为1100.在头上添加”bcb”可以得到最小费用,350+200+350=900.

题解

加入一个数可以视为删除一个数,那么问题转化为删数回文串

n^2dp即可

 #include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#define F(i,j,n) for(int i=j;i<=n;i++)
#define D(i,j,n) for(int i=j;i>=n;i--)
#define ll long long
#define maxn 2005
using namespace std;
char s[maxn],ch;
int m,n,x,y;
int f[maxn][maxn],w[];
inline int read()
{
int x=,f=;char ch=getchar();
while (ch<''||ch>''){if (ch=='-') f=-;ch=getchar();}
while (ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int main()
{
m=read();n=read();
scanf("%s",s+);
F(i,,m)
{
scanf("%c",&ch);while (ch<'a'||ch>'z') scanf("%c",&ch);
x=read();y=read();
w[ch-'a']=min(x,y);
}
D(i,n-,) F(j,i+,n)
{
f[i][j]=min(f[i+][j]+w[s[i]-'a'],f[i][j-]+w[s[j]-'a']);
if (s[i]==s[j]) f[i][j]=min(f[i][j],f[i+][j-]);
}
printf("%d\n",f[][n]);
}

最新文章

  1. Spring MVC入门
  2. 【译】Spring 4 @Profile注解示例
  3. Mantis搭建步骤
  4. cell重用的几种方式
  5. iPhone之为UIView设置阴影(CALayer的shadowColor,shadowOffset,shadowOpacity,shadowRadius,shadowPath属性)
  6. Java基础知识强化43:StringBuffer类之StringBuffer和String的相互转化
  7. linux系统配置Apache虚拟主机实例
  8. stm32之GPIO库函数开发
  9. 集成 ssh第一阶段
  10. DevExpress.XtraEditors.TextEdit 设为密码输入框
  11. bzoj 3261
  12. 教你搞定ElasticSearch(head)
  13. QQ的ldw值计算方法
  14. A1056. Mice and Rice
  15. js 唤起APP
  16. Http&amp;Tomcat
  17. idea配置springBoot项目热加载
  18. JS跨浏览器的事件处理
  19. BASIC-23_蓝桥杯_芯片测试
  20. 【2018 “百度之星”程序设计大赛 - 初赛(B)-1004】p1m2(迷之二分)

热门文章

  1. COGS 930. [河南省队2012] 找第k小的数
  2. codevs 3026 恶心的扑克
  3. 洛谷P1036 选数
  4. haproxy文件的增删改查
  5. CPP-基础:cout
  6. servlet多文件上传(带进度条)
  7. Java第十二次作业:什么是一维数组?什么是对象数组?吃金币游戏2.0版 新增炸弹功能 新增游戏倒计时功能 新增胜利失败检测功能 使用如鹏游戏引擎制作窗体 一维数组设置金币
  8. JS添加验证页面中script标签中是否存在jquery文件
  9. linux配置nodeJs环境教程
  10. HDU - 4811 - Ball (思维)