https://scut.online/p/125

看数据量,这题可能是O(n^2)的dp

也可能是区间dp,但是区间dp一般复杂度是O(n^3),虽然也可以优化,但是比赛的时候那么多人“秒”了,应该不会是那么麻烦的。

套路:设dp[i]表示前i个字符中能拿到的最大贡献。dp[len]就是答案。

如果[L, R]这段区间能组成回文串,那么就有两种决策,删除或则不删除。

删除:dp[R] = dp[L - 1] + a[R - L + 1]

不:  dp[R] = dp[R];

取个max就行。

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <assert.h>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL; #include <iostream>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <bitset>
const int maxn = 1e5 + ;
int a[maxn];
LL dp[maxn];
char str[maxn], sub[maxn];
int p[maxn];
int manacher(char str[], int lenstr) {
str[] = '*'; //表示一个不可能的值
//目标要插入lenstr+1个'#',所以长度变成2*lenstr+1
for (int i = lenstr; i >= ; i--) { //str[lenstr+1]是'\0'
//i=lenstr时,i+i+2那个值要赋为'\0';
//总长度只能是lenstr+lenstr+2,所以i从lenstr开始枚举
str[i + i + ] = str[i + ];
str[i + i + ] = '#';
}
int id = , maxlen = ; //现在开始在str[2]了
for (int i = ; i <= * lenstr + ; i++) { //2*lenstr+1是'#'没用
if (p[id] + id > i) { //没取等号的,只能去到p[id]+id-1
//p[id]+id是越界的,减去i即为区间长度
//p[id]+id-i,这个是所有可能中的最大值了
p[i] = min(p[id] + id - i, p[ * id - i]);
} else p[i] = ; //记得修改的是p[i]
while (str[i + p[i]] == str[i - p[i]]) ++p[i];
if (p[id] + id < p[i] + i) id = i;
maxlen = max(maxlen, p[i]);
}
return maxlen - ;
}
bool isok(int be, int en) {
int len = en - be + ;
be <<= ;
en <<= ;
int mid = (be + en) >> ;
return p[mid] - >= len;
}
void work() {
int n;
cin >> n;
for (int i = ; i <= n; ++i) cin >> a[i];
memset(dp, , sizeof dp);
cin >> str + ;
int lenstr = strlen(str + );
strcpy(sub + , str + );
manacher(str, lenstr);
for (int i = ; i <= lenstr; ++i) {
for (int j = ; j <= i; ++j) {
if (i - j + > n) continue;
if (isok(j, i)) {
dp[i] = max(dp[i], dp[j - ] + a[i - j + ]);
}
}
}
cout << dp[lenstr] << endl;
} int main() {
#ifdef local
freopen("data.txt", "r", stdin);
// freopen("data.txt", "w", stdout);
#endif
int t;
cin >> t;
while (t--) work();
return ;
}

scut 125. 笔芯回文的更多相关文章

  1. SCUT 125 :笔芯回文(DP)

    https://scut.online/p/125 125. 笔芯回文 题目描述 bxbx有一个长度一个字符串SS,bxbx可以对其进行若干次操作. 每次操作可以删掉一个长度为k(1 \leq k \ ...

  2. 前端与算法 leetcode 125. 验证回文串

    目录 # 前端与算法 leetcode 125. 验证回文串 题目描述 概要 提示 解析 解法一:api侠 解法二:双指针 算法 传入测试用例的运行结果 执行结果 GitHub仓库 查看更多 # 前端 ...

  3. Java实现 LeetCode 125 验证回文串

    125. 验证回文串 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, ...

  4. SCUT125 华为杯 D.笔芯回文 —— DP

    题目链接: https://scut.online/p/125 题目描述 bxbx有一个长度一个字符串SS,bxbx可以对其进行若干次操作. 每次操作可以删掉一个长度为k(1 \leq k \leq ...

  5. 力扣(LeetCode)125. 验证回文串

    给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a c ...

  6. leetcode 125 验证回文字符串 Valid Palindrome

    验证回文字符串 C++ 思路就是先重新定义一个string ,先遍历第一遍,字符串统一小写,去除空格:然后遍历第二遍,首尾一一对应比较:时间复杂度O(n+n/2),空间O(n); class Solu ...

  7. leetcode 125. 验证回文串(python)

    给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a c ...

  8. leetcode.字符串.125验证回文串-Java

    1. 具体题目 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写.说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a pl ...

  9. Leetcode 125.验证回文字符串(Python3)

    题目: 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, ...

随机推荐

  1. wordpress汇总(持续更新)

    在wordpress上新建编辑了几个页面,总是不能正常发布预览.经调查是由于固定链接的设置有问题导致的.打开左侧栏目“设置”中的固定链接项,可以看到目前所选的是“自定义结构”型.将其更改为“朴素”型后 ...

  2. hdu-5826 physics(数学)

    题目链接: physics Time Limit: 6000/3000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others) P ...

  3. zabbix告警邮件美化

    为了更好的用户体验,我们需要尽量美化我们的输出内容,尽量做到整齐划一,让人看了会有很舒服的感觉, 这个好像和苹果的产品一样,给人一种美感让人感觉非常享受. 一般我们的zabbix告警邮件就是纯文字,建 ...

  4. AIX 7.1上安装Oracle11g

    1. 上传oracle 11g介质到AIX 我下载的介质是aix.ppc64_11gR2_database_1of2.zip和aix.ppc64_11gR2_database_2of2.zip, 执行 ...

  5. Elasticsearch搜索引擎版本配置

    简要描述: 搜索引擎版本配置 产品 版本号 ES版本要求 说明 PHP =5.5.38     Java =1.8.0_73   用于支持ES Elasticsearch =2.3.5   搜索引擎 ...

  6. jquery效果基础运用

    jQuery 版本 2 以上不支持 IE6,7,8 浏览器.如果需要支持 IE6/7/8,那么请选择1.9你还可以通过条件注释在使用 IE6/7/8 时只包含进1.9.<!--[if lt IE ...

  7. 利用mysql客户端查询UCSC数据库

    UCSC Genome Browser是由University of California Santa Cruz (UCSC) 创立和维护的,该站点包含有人类.小鼠和大鼠等多个物种的基因组草图和注释信 ...

  8. 《Java多线程编程核心技术》读后感(十八)

    线程中出现异常的处理 package Seven; public class MyThread extends Thread { @Override public void run() { Strin ...

  9. setInterval(callbackfunc,time)中callbackfunc传参数问题

    var si=setInterval(callbackfunc,time)中callbackfunc传参数问题(循环执行) var st=setTimeout(callbackfunc,time);定 ...

  10. jquery中的$.ajax()的源码分析

    针对获取到location.href的兼容代码: try { ajaxLocation = location.href; } catch( e ) { // Use the href attribut ...