【BZOJ1710】[Usaco2007 Open]Cheappal 廉价回文【区间DP】

原创 2016年05月31日 18:49:52

【题目链接】

经典区间DP。

首先添加一个字符和删除一个字符是等价的,因为在一个位置添加一个字符,就等价与在对称回文的位置删除一个字符,删除同理。那么我们只需要考虑删除字符。

设dp[l][r]表示将[l, r]改为回文串的最小代价,那么有

(1)dp[l][r] = min(dp[l + 1][r] + cost[str[l]], dp[l][r - 1] + cost[str[r]])

(2)如果str[l] == str[r],那么dp[l][r] = min(dp[l][r], dp[l + 1][r - 1])

/* Telekinetic Forest Guard */
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int maxn = 2005, maxm = 28, inf = 0x3f3f3f3f;

int n, m, num[maxn], dp[maxn][maxn], cost[maxm];
char str[maxn];

inline int iread() {
	int f = 1, x = 0; char ch = getchar();
	for(; ch < '0' || ch > '9'; ch = getchar()) f = ch == '-' ? -1 : 1;
	for(; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
	return f * x;
}

inline int dfs(int l, int r) {
	if(l == r) return 0;
	if(~dp[l][r]) return dp[l][r];
	int res = inf;
	res = min(dfs(l + 1, r) + cost[num[l]], dfs(l, r - 1) + cost[num[r]]);
	if(num[l] == num[r]) res = min(res, dfs(l + 1, r - 1));
	return dp[l][r] = res;
}

int main() {
	m = iread(); n = iread();
	scanf("%s", str + 1);
	for(int i = 1; i <= n; i++) num[i] = str[i] - 'a' + 1;
	for(int i = 1; i <= m; i++) {
		int w1, w2;
		scanf("%s%d%d", str, &w1, &w2);
		cost[str[0] - 'a' + 1] = min(w1, w2);
	}
	for(int i = 1; i <= n; i++) for(int j = i; j <= n; j++) dp[i][j] = -1;
	printf("%d\n", dfs(1, n));
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

bzoj1710【Usaco2007 Open】Cheappal 廉价回文

DP

1047: [HAOI2007]理想的正方形

题目链接题目大意:有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值 的差最小。题解: 单调队列我的收获:...
  • Mmh2000
  • Mmh2000
  • 2017年04月02日 18:48
  • 116

1257: [CQOI2007]余数之和sum

题目链接题目大意:给出一个数列(初始为空),给出一个最小值Min,当数列中的数字小于Min时自动删除。四种操作:(1)数列中增加一个元素,设置初始值x;若x小于Min则不插入;(2)所有的元素增加一个...
  • Mmh2000
  • Mmh2000
  • 2017年07月18日 19:09
  • 83

[Usaco2007 Open]Cheappal-DP合并类

Description 为了跟踪所有的牛,农夫JOHN在农场上装了一套自动系统. 他给了每一个头牛一个电子牌号  当牛走过这个系统时,牛的名字将被自动读入. 每一头牛的电子名字是一个长度为M (1 ...

【BZOJ 1646】 [Usaco2007 Open]Catch That Cow 抓住那只牛

spfa进行dp转移~

bzoj1646 [Usaco2007 Open]Catch That Cow 抓住那只牛

DescriptionFarmer John has been informed of the location of a fugitive cow and wants to catch her im...

[bzoj1647][Usaco2007 Open]Fliptile 翻格子游戏

1647: [Usaco2007 Open]Fliptile 翻格子游戏Time Limit: 5 Sec Memory Limit: 64 MB Submit: 702 Solved: 281...

BZOJ1647: [Usaco2007 Open]Fliptile 翻格子游戏 Dfs

1647: [Usaco2007 Open]Fliptile 翻格子游戏 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 566  Solve...
  • Oakley_
  • Oakley_
  • 2016年08月26日 23:20
  • 369

[BZOJ1645][Usaco2007 Open]City Horizon 城市地平线(扫描线+线段树)

要积极面对每一个变数,因为每个变数都可能是你新生活的开始。

网络流 模板【Usaco2007 Open】bzoj1711 Dining吃饭

网络流 网络流通常有一个源点,一个汇点,和其他若干点,这些点之间有若干条有向边,每条边上有一个负载上限,称为容量。题目通常要求我们求出在所有边容量允许的范围内,从源点到汇点流量的最大值。 一般情况...
  • Todobe
  • Todobe
  • 2016年12月28日 19:27
  • 162
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【BZOJ1710】[Usaco2007 Open]Cheappal 廉价回文【区间DP】
举报原因:
原因补充:

(最多只允许输入30个字)