比赛的时候队友过了,补补题XD。

题目链接:https://scut.online/p/125(赛后补题)

125. 笔芯回文

 
 

题目描述

bx有一个长度一个字符串S,bx可以对其进行若干次操作。

每次操作可以删掉一个长度为k(1≤k≤n)的连续回文子串,bx获得a​k​​的愉悦值。

一个字符串是回文串当且仅当正读和反读都是一样的。例如"a", "aa", "abcba""a","aa","abcba"是回文串,"ab", "abc","aabab""ab","abc","aabab"不是回文串。

字符串删除之后相邻的字符不会合并在一起。

现在,bx想知道他最多能获得多少愉悦值。

输入格式

输入第一行一个整数T,表示数据组数。

对于每组数据,第一行一个整数n。

第二行n个整数,第i个表示a​i​​。

第三行为字符串S。

1≤T≤20

1≤n≤∣S∣≤5000

0≤a​i​​≤1000000000

SS只包括小写字母。

输出格式

对每组数据,输出bx所能获得的最大愉悦值。

样例数据

输入

2
3
1 2 3
aba
3
3 2 1
aba

输出

3
9

备注

题解:

  简单的dp题目。用n^2枚举回文串。(ok[i][j]为第i位到第j为的字符为回文串)

  dp[i]为第i位结尾的最大愉悦值。

  找动态转移方程:当第j个开始到第i个位回文串的时候 dp[i] = max(dp[j-1]+a[i到j的距离], dp[i])。j在[1, i-1]。

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <sstream>
#include <algorithm>
using namespace std;
#define pb push_back
#define mp make_pair
#define ms(a, b) memset((a), (b), sizeof(a))
//#define LOCAL
#define eps 0.0000001
typedef long long LL;
const int inf = 0x3f3f3f3f;
const LL INF = 0x7fffffff;
const int maxn = +;
const int mod = ;
char s[maxn];
LL a[maxn];
int ok[maxn][maxn];
LL dp[maxn];
void init()
{
ms(s, );
ms(ok, );
ms(dp, );
}
void solve()
{
int n;
scanf("%d", &n);
for(int i = ;i<=n;i++) scanf("%lld", &a[i]);
scanf("%s", s+);
int len = strlen(s+);
// printf("%d\n", len);
for(int i=;i<=len;i++){//判断奇数时逝世后为回文串
ok[i][i] = ;
for(int j = ;;j++){
if(( j* + ) > n || i-j < || i+j > len ) break;//回文串的长度要小于等于n
if(s[i-j] == s[i+j]){
ok[i-j][i+j] = ;
}else break;
}
}
for(int i = ;i<=len;i++){//判断偶数个时是否为回文串
if(s[i] != s[i+]) continue;
ok[i][i+] = ;
for(int j = ;;j++){
if( i-j < || i++j > len || j*+ > n) break;//回文串的长度要小于等于n
if(s[i-j] == s[i++j]){
ok[i-j][i++j] = ;
}else break;
}
}
dp[] = a[];
for(int i=;i<=len;i++){
dp[i] = max(dp[i], dp[i-]+a[]);
for(int j = ;j<i;j++){
if(ok[j][i]){
dp[i] = max(dp[i], dp[j-]+a[i-j+]);
}
}
}
printf("%lld\n", dp[len]);
}
int main() {
#ifdef LOCAL
freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
#endif // LOCAL
// ios::sync_with_stdio(0);
// cin.tie();
int T;
scanf("%d", &T);
while(T--){
init();
solve();
}
return ;
}

你努力的时候,比你厉害的人也在努力。

2017华南理工华为杯D bx回文的更多相关文章

  1. 2017华南理工华为杯H bx值(容斥问题)

    题目描述 对于一个nnn个数的序列 a1,a2,⋯,ana_1,a_2,\cdots,a_na​1​​,a​2​​,⋯,a​n​​,从小到大排序之后为ap1,ap2,⋯,apna_{p_1},a_{p ...

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

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

  3. 【蓝桥杯】PREV-21 回文数字

    题目链接:http://lx.lanqiao.org/problem.page? gpid=T113   历届试题 回文数字   时间限制:1.0s   内存限制:256.0MB      问题描写叙 ...

  4. Java实现蓝桥杯历届试题回文数字

    历届试题 回文数字 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的.这样的数字叫做: ...

  5. BASIC-9_蓝桥杯_特殊回文数

    示例代码: #include <stdio.h> int main(void){ int n = 0 ; scanf("%d",&n); int i = 0 ; ...

  6. 2020华为杯数学建模B题-RON建模 赛后总结与分析

    好久好久没有写博客了...挺累的,从二月份开始找暑期实习,接着在进行暑期实习,然后马不停蹄地进行秋招,现在总算结束实习,前两天又参加了华为杯数学建模竞赛,感觉接下来就会很轻松了,希望能好好休息休息.这 ...

  7. (更新中)"华为杯" 武汉大学21级新生程序设计竞赛 非官方题解

    "华为杯" 武汉大学21级新生程序设计竞赛 https://ac.nowcoder.com/acm/contest/31620#question D.和谐之树 思路:披着线段树外皮 ...

  8. [蓝桥杯]PREV-21.历届试题_回文数字

    问题描述 观察数字:, 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的.这样的数字叫做:回文数字. 本题要求你找到一些5位或6位的十进制数字.满足如下要求: 该数字的各个数位之和等于输入 ...

  9. ALGO-14_蓝桥杯_算法训练_回文数

    问题描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. 例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数. 又如:对于10进制数 ...

随机推荐

  1. [Git] 006 在本地新建一个仓库

    1. 方法一 1.1 思路 在 GitHub 上新建一个仓库 clone 到本地 1.2 行动 1.2.1 在 GitHub 上选好自己已有的仓库 点击 "Clone or download ...

  2. SQL基本语法和书写格式

    插入 insert [into] 表名 [(列名列表)] values (值列表) insert into 新表名 (列名列表) select 列名列表 from 表名 select 表名.列名 in ...

  3. cJSON使用笔记

    将cJSON用到STM32f103上 cJSON内存管理使用的是标准库stdlib.h的malloc()free()realloc()动态内存管理函数,我STM32F103使用的是正点原子的mallo ...

  4. 01背包(第k优解)

    Bone Collector II Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  5. 洛谷 P1073 最优贸易 & [NOIP2009提高组](反向最短路)

    传送门 解题思路 很长的题,实际上在一个有向图(点有点权)中求一个从起点1到终点n的路径,使得这条路径上点权最大的点与点权最小的点的差值最大(要求必须从点权较小的点能够走到点权较大的点). ——最短路 ...

  6. mybatis的<用<![CDATA[]] 忽略解析

    1 CDATA 术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data). 在 XML 元素中,"<" 和 &quo ...

  7. 异步json发送put或者delete

    第一种 put请求或者delete请求 直接写发送的情况 //批量删除 function batchDel() { var ids = []; $("#list-table").f ...

  8. 2019-8-31-dotnet-core-集成到-Mattermost-聊天工具

    title author date CreateTime categories dotnet core 集成到 Mattermost 聊天工具 lindexi 2019-08-31 16:55:58 ...

  9. 2018-8-28-win10-uwp-MVVM入门

    title author date CreateTime categories win10 uwp MVVM入门 lindexi 2018-08-28 15:37:52 +0800 2018-2-13 ...

  10. NTP时间服务器构建

    搭建一个NTP服务器,为整个网络环境中的所有主机提供时间校准服务,具体如下: - 部署一台NTP时间服务器 - 设置时间服务器上层与0.centos.pool.ntp.org同步 - 设置本地服务器层 ...