SCUT 125 :笔芯回文(DP)
125. 笔芯回文
题目描述
bxbx有一个长度一个字符串SS,bxbx可以对其进行若干次操作。
每次操作可以删掉一个长度为k(1 \leq k \leq n)k(1≤k≤n)的连续回文子串,bxbx获得a_kak的愉悦值。
一个字符串是回文串当且仅当正读和反读都是一样的。例如"a", "aa", "abcba""a","aa","abcba"是回文串,"ab", "abc","aabab""ab","abc","aabab"不是回文串。
字符串删除之后相邻的字符不会合并在一起。
现在,bxbx想知道他最多能获得多少愉悦值。
输入格式
输入第一行一个整数TT,表示数据组数。
对于每组数据,第一行一个整数nn。
第二行nn个整数,第ii个表示a_iai。
第三行为字符串SS。
1 \leq T \leq 201≤T≤20
1 \leq n \leq |S| \leq 50001≤n≤∣S∣≤5000
0 \leq a_i \leq 10000000000≤ai≤1000000000
SS只包括小写字母。
输出格式
对每组数据,输出bxbx所能获得的最大愉悦值。
样例数据
输入
2
3
1 2 3
aba
3
3 2 1
aba
输出
3
9 思路:比赛的时候用了Manacher搞,然后dp求解,但是n并不是字符串的长度,所以也不知道是这里的错误还是本身就有错。
现在用O(n^2)的开一个has[L][R]数组,代表[L,R]这个区间有一个回文串,然后dp求解。
dp[i]表示[1,i]区间最大的愉悦度是多少,然后再用一个j往前扫。
dp[i] = max(dp[i], dp[j-1] + a[i-j+1]) (has[j][i] == 1)
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
#define N 5010
bool has[N][N];
LL dp[N], a[N];
char s[N]; int main() {
int t; scanf("%d", &t);
while(t--) {
int n; scanf("%d", &n);
for(int i = ; i <= n; i++) scanf("%lld", &a[i]);
scanf("%s", s + );
int len = strlen(s + );
memset(has, , sizeof(has));
memset(dp, , sizeof(dp));
for(int i = ; i <= len; i++) {
int j = ;
while( <= i - j && i + j <= len && s[i-j] == s[i+j]) has[i-j][i+j] = true, j++;
j = ;
while( <= i - j && i + j + <= len && s[i-j] == s[i+j+]) has[i-j][i+j+] = true, j++;
}
for(int i = ; i <= len; i++) {
dp[i] = dp[i-];
for(int j = i; i - j + <= n && j; j--) {
if(has[j][i]) {
dp[i] = max(dp[i], dp[j-] + a[i-j+]);
}
}
}
printf("%lld\n", dp[len]);
}
return ;
}
SCUT 125 :笔芯回文(DP)的更多相关文章
- scut 125. 笔芯回文
https://scut.online/p/125 看数据量,这题可能是O(n^2)的dp 也可能是区间dp,但是区间dp一般复杂度是O(n^3),虽然也可以优化,但是比赛的时候那么多人“秒”了,应该 ...
- SCUT125 华为杯 D.笔芯回文 —— DP
题目链接: https://scut.online/p/125 题目描述 bxbx有一个长度一个字符串SS,bxbx可以对其进行若干次操作. 每次操作可以删掉一个长度为k(1 \leq k \leq ...
- 前端与算法 leetcode 125. 验证回文串
目录 # 前端与算法 leetcode 125. 验证回文串 题目描述 概要 提示 解析 解法一:api侠 解法二:双指针 算法 传入测试用例的运行结果 执行结果 GitHub仓库 查看更多 # 前端 ...
- Java实现 LeetCode 125 验证回文串
125. 验证回文串 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, ...
- NYOJ 1023 还是回文(DP,花最少费用形成回文串)
/* 题意:给出一串字符(全部是小写字母),添加或删除一个字符,都会产生一定的花费. 那么,将字符串变成回文串的最小花费是多少呢? 思路:如果一个字符串增加一个字符 x可以形成一个回文串,那么从这个字 ...
- [51nod1503]猪和回文 DP
---题面--- 题解: 首先观察到题目要求的是合法回文串的个数,而回文串要求从前往后和从后往前是一样的,因此我们假设有两只猪,分别从左上和右下开始走,走相同的步数最后相遇,那么它们走的路能拼在一起构 ...
- 1503 猪和回文(DP)
1503 猪和回文 题目来源: CodeForces 基准时间限制:2 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 一只猪走进了一个森林.很凑巧的是,这个森林的形状是长方形的,有 ...
- 【LSGDOJ1383】修改回文 dp
题目描述 为了跟踪所有的牛,农夫JOHN在农场上装了一套自动系统. 他给了每一个头牛一个电子牌号 当牛走过这个系统时,牛的名字将被自动读入. 每一头牛的电子名字是一个长度为M (1 <= M & ...
- 力扣(LeetCode)125. 验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a c ...
随机推荐
- UVE开发环境搭建及项目启动
1.IDE安装visual studio code ,略: 2.node安装(node-v10.5.0-win-x64.zip),解压即可: 3.配置node环境变量,cmd 输入node -v.np ...
- C#(WPF)为Grid添加实线边框。
原文:C#(WPF)为Grid添加实线边框. 相信大家在做WPF项目的时候,都会用到Grid这个布局控件,一般情况下,如果只是为了布局,那就不需要显示它的边框,但是也有特殊需求,如果把它当做表格来使用 ...
- jquery 可以给事件传参数
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- Fiddler应用
Fiddler是什么 Fiddler是位于客户端和服务器端的HTTP代理,也是目前最常用的http抓包工具之一 . 它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请 ...
- WPF控件深拷贝:序列化/反序列化
原文:WPF控件深拷贝:序列化/反序列化 今天DebugLZQ在做WPF拖动总结的时候,遇到了这个问题.baidu了下,貌似没有解决这个问题的权威答案,遂写下这篇博文. 我想做的事情是:拖动一个窗体内 ...
- android L 关机流程图
下面是简单的流程图,从Java到kernel层. ShutdownThread.java文件 stop playing music,因为后面可能要playing shutdown music. 代码如 ...
- SQL Server 可更新订阅中有行筛选的同步复制移除项目而不重新初始化所有订阅!
原文:SQL Server 可更新订阅中有行筛选的同步复制移除项目而不重新初始化所有订阅! 在可更新订阅的同步复制中,有行筛选的项目表,移除的时候会提示重新初始化所有的快照并且应用此快照,这将导致所有 ...
- 微信小程序把玩(十八)picker组件
原文:微信小程序把玩(十八)picker组件 picker选择器分为三种,普通选择器,时间选择器, 日期选择器 用mode属性区分,默认是普通选择器.测试时时间和日期点击无反应不知道是BUG还是啥!没 ...
- Android零基础入门第61节:滚动视图ScrollView
原文:Android零基础入门第61节:滚动视图ScrollView 前面几期学习了ProgressBar系列组件.ViewAnimator系列组件.Picker系列组件和时间日期系列组件,接下来几期 ...
- C++没有库则寸步难行,有库则几乎可以做任何事情——Bjarne Stroustrupi
"Without a good library, most interesting tasks are hard to do in C++; but given a good library ...