【KMP】 hdu3613 Best Reward

【代码超详解】HDU 3613 Best Rewards(Manacher 算法) 一、题目描述 测试数据: input 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 qabccbadddefghhgfeddd 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 aba 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... 阅读详情

Best Reward

http://acm.hdu.edu.cn/showproblem.php?pid=3613



Problem Description
After an uphill battle, General Li won a great victory. Now the head of state decide to reward him with honor and treasures for his great exploit. 

One of these treasures is a necklace made up of 26 different kinds of gemstones, and the length of the necklace is n. (That is to say: n gemstones are stringed together to constitute this necklace, and each of these gemstones belongs to only one of the 26 kinds.) 

In accordance with the classical view, a necklace is valuable if and only if it is a palindrome - the necklace looks the same in either direction. However, the necklace we mentioned above may not a palindrome at the beginning. So the head of state decide to cut the necklace into two part, and then give both of them to General Li. 

All gemstones of the same kind has the same value (may be positive or negative because of their quality - some kinds are beautiful while some others may looks just like normal stones). A necklace that is palindrom has value equal to the sum of its gemstones' value. while a necklace that is not palindrom has value zero. 

Now the problem is: how to cut the given necklace so that the sum of the two necklaces's value is greatest. Output this value. 

 

Input
The first line of input is a single integer T (1 ≤ T ≤ 10) - the number of test cases. The description of these test cases follows. 

For each test case, the first line is 26 integers: v 1, v 2, ..., v 26 (-100 ≤ v i ≤ 100, 1 ≤ i ≤ 26), represent the value of gemstones of each kind. 

The second line of each test case is a string made up of charactor 'a' to 'z'. representing the necklace. Different charactor representing different kinds of gemstones, and the value of 'a' is v 1, the value of 'b' is v 2, ..., and so on. The length of the string is no more than 500000. 

 

Output
Output a single Integer: the maximum value General Li can get from the necklace.
 

Sample Input
  
2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 aba 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 acacac
 

Sample Output
  
1 6


题意:小写字母组成的长n的串, 每种字母有一定的价值(可以为负), 要你分成切成两个串, 总价值为两个串价值和, 若是回文, 则串的价值为每个字母价值和, 否则为0。 问最大价值多少。

题解:把原串反转接在原串后, 中间夹个#, 然后做KMP, 于是末尾的next就指向了原串的最长回文前缀的末尾.(具体可以看http://roba.rushcj.com/?p=439),接着把前面的原串再反转, 再做一次KMP, 就找到了所有回文后缀,最后只要线性扫一遍找最大值即可.


#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define MAX 500005
char s[MAX<<1];
int nextx[MAX<<1],value[30];
int summ[MAX],v[2][MAX];
int n,m;
void get_nextx()
{
    int i=0,j=-1;
    nextx[0]=-1;
    for(;i<m;)
        if(j==-1||s[i]==s[j])
        {
            ++i;++j;
            nextx[i]=j;
        }
        else j=nextx[j];
}
void check(int x)
{
    summ[0]=0;
    for(int i=0;i<n;++i)
        summ[i+1]=summ[i]+value[s[i]-'a'];
    reverse_copy(s,s+n,s+n+1);
    s[n]='#';
    get_nextx();
    memset(v[x],0,sizeof(v[x]));
    int p=m;
    for(;;)
    {
        p=nextx[p];
        if(!~p) break;
        v[x][p]=summ[p];
    }
}
int main()
{
    int cas;
    scanf("%d",&cas);
    for(;cas--;)
    {
        int ans=-((1<<25)-1);
        for(int i=0;i<26;++i) scanf("%d",&value[i]);
        scanf("%s",s);
        n=strlen(s);
        m=2*n+1;
        check(0);
        reverse(s,s+n);
        check(1);
        reverse(v[1],v[1]+n+1);
        for(int i=1;i<n;++i)
            ans=max(ans,v[0][i]+v[1][i]);
        printf("%d\n",ans);
    }
    return 0;
}


【LaTeX PPT模板集】Beamer主题与配色使用教程 阅读详情

相关推荐

基于阻抗控制的工业机器人轨迹跟踪系统 Simulink/Simscape 仿真

  本文是对文献 [1] 的复现。 关于阻抗控制   阻抗控制的提出可以追溯到 1984 年,Neville Hogan 在 American Control Conference 发表的 Impedance Control:An Approach to Manipulation ,次年,Hogan N. 又在 Journal of Dynamic Systems Measurement and Control-transactions of The Asme 发表了阻抗控制经典三部曲 —— Imped.

-贝塔- 的博客 2万+

HDU 3613 Manacher算法

题意有一串字符,将其切成两串,如果一串是回文的,那么便是这个回文串所有的元素值累加。如果不是回文的,那么值便是0。问最大可获得的值是多少。题解Manacher模板套上去,记录一下前缀回文和后缀回文。枚举切割点,求最大值。代码#include <iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<vecto

zhenlingcn的博客 365

避坑指南:ZYNQ MPSOC QSPI固化时MT25QU256闪存的特殊配置

本文针对Xilinx ZYNQ UltraScale+ MPSoC平台,详细解析了使用Vitis工具将BOOT.bin固化至Micron MT25QU256ABA QSPI NOR Flash时的特殊配置与避坑指南。重点阐述了Init文件的真实作用、电压与频率的精确匹配策略,以及针对该闪存型号的初始化序列,帮助工程师解决烧录失败、启动异常等常见问题,确保系统可靠启动。

weixin_29175469的博客 271

hdu3613(manacher)

链接:点击打开链接 题意:给出二十六个字母每一个字母的权值,现给个字符串,要求将这个字符串分成两部分,只有当分成后的字符串是回文时,才能计算其字母的权值和,问怎么分使得权值和最大 代码: #include &lt;map&gt; #include &lt;set&gt; #include &lt;queue&gt; #include &lt;string&gt; #include &lt;...

stay_accept的专栏 518

“Agent Harness”和“Harness Engineering”

摘要:2026年AI工程化领域,"Agent Harness"(AI代理运行控制系统)与"Harness Engineering"(马具工程方法论)常被混淆。前者是管理AI代理非推理事务的技术实体(工具调用、记忆管理、安全约束等7层架构),后者是设计优化该系统的工程学科。研究表明,优化的Harness设计可使同一模型性能提升10倍。两者关系如同"马具"与"制具工艺":Harness Engineering指导Agent Harn

几十年资深高级架构师,技术专家的技术笔记。专注C、Java、Python、微服务、云原生、AI工程化及高并发系统分布式架构实战,分享源码剖析、性能调优与架构治理经验。 845

FileZilla Server 1.2.0 TLS证书过期问题

FileZilla Server TLS证书过期后重新生成

Wigle的备忘录 7528

HDU 3613 Best Reward(求前后缀回文 拓展KMP or Manacher)

题目大意: 给个字符串X,要把X分成两段T1,T2,每个字母都有一个对应的价值,如果T1,T2是回文串(从左往右或者从右往左读,都一样),那么他们就会有一个价值,这个价值是这个串的所有字母价值之和,如果不是回文串,那么这串价值就为0。问最多能获得多少价值? 思路: 把字符串X逆序后得到字符串Y 让X去匹配Y ,匹配的长度满足extend[i] + i == len,  le

kalilili的专栏 1882

瑞芯微RK3576上手实测:8nm新U配6TOPS NPU,做AIoT项目选它还是RK3588/RK3568?

本文深度评测瑞芯微RK3576芯片在中高端AIoT项目中的表现,对比RK3588和RK3568的性能差异。RK3576采用8nm工艺,配备6TOPS NPU,在解码能力、AI推理效率和功耗控制方面表现均衡,是中端项目的黄金选择。实测数据显示其在多路视频解码和AI加速性能上优势明显,特别适合智能摄像头和工业HMI设备。

weixin_42627853的博客 717

HDU3613:Best Reward(拓展KMP)

Problem Description After an uphill battle, General Li won a great victory. Now the head of state decide to reward him with honor and treasures for his great exploit.  One of these treasures is a

ACM!荣耀之路! 2142

IMX335摄像头原理图设计,已量产

从工程组织上看,IMX335 模组和 IMX415 模组属于同一类产品:核心矛盾不是外设多,而是高速图像链路、电源域和调试接口要同时兼顾。ATK-MCIMX335 这张图的结构也很直接,三路 LDO、本地 24MHz 可选时钟、4-lane MIPI 数据对和一组主板侧标准接口,构成了一张非常典型的量产摄像头子板。

不脱发的程序猿 440

Chrome更新出现错误代码3: 0X80070422 -- system level的解决方案

本文主要介绍了Chrome更新出现错误代码3: 0X80070422 – system level的解决方案,希望能对使用Chrome的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

hdu3613 Best Reward(KMP)

本题难度在于判断回文前缀和回文后缀。我们设原串为s1,把原串翻转后得到的串记为s2.以s1为模式串去匹配s2,最后匹配到的位置我们记为k,k就是最长回文前缀长度。根据fail的性质,每一次fail[k]到的位置都满足前缀回文。那么我们就把这些回文前缀都标记了。回文后缀同理,我们以s2为模式串去匹配s1,那么k就是s2的最长回文前缀长度,即s1的最长回文后缀长度。同样处理,把这些回文后缀标记。然后我

Icefox的博客 410

SAP Fiori Launchpad 自定义层文本翻译实战:精准修正 Tile、Catalog 与 Group 标题

SAP Fiori 项目中,入口层(tile/catalog/group)的翻译问题常被忽视,但其直接影响用户体验。与前端i18n不同,这些文本属于平台配置数据,需通过ABAP标准翻译流程(SE63)处理。关键步骤包括:使用/UI2/FLC定位Text ID和Configuration ID,根据前缀区分Main/Property WD Config Key,在SE63中锁定WDY_CONF_USERT2表对象进行翻译。操作时需注意使用系统源语言环境,翻译完成后可能需要清理缓存。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 171

HDU 3613 Best Reward(扩展KMP)

题意:每个字母有一个权值,要把一个字符串分为2部分(都非空),只有这部分是回文串才能算权值,问权值和最大是多少。 做法:这题比较简单,用manacher算出每个点为中心的最大回文串长度,必须延伸到两端才是有用的。不过学习了下扩展KMP。 学习资料:http://www.cnblogs.com/Rlemon/archive/2013/06/26/3157574.html 思想其实跟manach

glq007的acm的奋斗 871

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

HDU3613 Best Reward —— 扩展KMP

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3613 Best Reward Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 2644    Accepted Sub

A man can be destroyed, but not defeated. 375

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

HDU 3613 Best Reward(KMP+思维||manacher算法)

题目链接:点击打开链接 题意:26个小写英文字母都有一个价值,给你一个字符串,将该字符串切成左右两半,对于每一半,如果是回文串,就获得该子串的字母价值之和,否则该子串的价值为0。求出将字符串切成两半后能够获得的最大价值。 思路一:KMP+思维。 思路二:manacher算法(马拉车算法) 具体思路明天写...... // HDU 3613 Best Reward 运行/限制:93ms/1

不忘初心 472

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

[扩展KMP][HDU3613][Best Reward]

题意:将一段字符串 分割成两个串 如果分割后的串为回文串,则该串的价值为所有字符的权值之和(字符的权值可能为负数),否则为0。 问如何分割,使得两个串权值之和最大思路:首先了解扩展kmp 扩展KMP:给出模板串A和子串B,长度分别为lenA和lenB,要求在线性时间内,对于每个A[i](0<=i<=lenA-1),求出A[i..lenA-1]与B的最长公共前缀长度,记为ex[i](或者说

学习之路 476

扩展kmp求最长回文子串_hdu3613 Best Reward 扩展kmp or O(n)求最大回文子串

/**题目:hdu3613 Best Reward链接:http://acm.hdu.edu.cn/showproblem.php?pid=3613题意:有一个字符串,把他切成两部分。如果这部分是回文串,那么他的值为所有字母的权值和。否则这部分值为0;这两部分的值和为该切法的权值。求最大的切法的权值。思路:如果能够判断[0,i],[i,n-1]是一个回文串(0<=i取最大的。扩展kmp的做法...

weixin_39762001的博客 158

扩展KMP --- HDU 3613 Best Reward

Best Reward Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=3613   Mean:  给你一个字符串,每个字符都有一个权值(可能为负),你需要将这个字符串分成两个子串,使得这两个子串的价值之和最大。一个子串价值的计算方法:如果这个子串是回文串,那么价值就是这个子串所有字符权值之和;否则价值为0。  

北岛知寒 285

HDU 3613 Best Reward(manacher、KMP、EXKMP)

Best Reward Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 4657Accepted Submission(s): 1905 Problem Description After an uphill battl...

~ 504

HDU - 3613 Best Reward(KMP和拓展KMP)

题目大意:给你26个字符对应的价值和一个字符串,要求你将字符串分成两个部分。分开后,如果那部分是回文的话,那么价值就是该部分字符的价值和,如果不是回文,价值为0,问分开后的最大价值和解题思路:可以用KMP做也可以用拓展KMP做KMP做的话,假设原字符串是s1,然后将字符串倒转变成s2,先求s1的后缀和s2的前缀匹配的部分,这部分是s1的后缀的回文部分,然后再通过next数组,找出所有的回文,并标记

静静地码 614

hdu 3613 Best Reward 扩展kmp

#include<iostream> #include<cstring> #include<cstdio> using namespace std; const int MM=500100; int next1[MM],extand1[MM]; int next2[MM],extand2[MM]; int sum[MM]; char S[...

amily05200的博客 147

HDU3613 Best Reward(扩展KMP)

题意:给一个由小写字母构成的字符串,每个字母否有对应的值,将串分成两个子串,如果子串是回文串的话子串的值就是每个字符的值之和;否则子串的值就是0.原串的值等于两个子串之和,求原串能取到的最大的值。 思路:求回文子串的和的最大值显然需要找出所有可能的回文子串,可以用扩展KMP。先将原串s1反转得到s2,以s1为目标串s2为模式串做一次扩展KMP得到extend1数组,此时若 extend1

hcx11333的博客 287

hdu 3613 Best Reward (kmp扩展)

题意: 给出一个字符串,并且给出每种字符串对应的价值,现在要二分这个字符串,如果二分的两部分,如果是回文串就加上对应字符的价值所谓这两个部分的价值,如果不是回文两个部分的价值为0。 题解: 这题相当于可以转化为求回文前缀和后缀,求回文前缀:将原串反转接到原串后面。求回文后缀:将原串接到原串反转后的串后面。人后求next数组,next[len]就最长的那个回文前缀,不断k=next[k]就能找

ACM之梦 554

HDU 3613 Best Reward(扩展KMP:回文判断)

HDU 3613 Best Reward(扩展KMP:回文判断) http://acm.hdu.edu.cn/showproblem.php?pid=3613 题意:给你一个字符串,要你把这个字符串分成两段,并使得被分开的两段价值和最大.一个串如果是回文,那么它的价值就是所有字符的价值和,否则价值为0. 分析:        首先原始串为S,将S逆转得到串T.(S=abcaaa,那么T=a

code 2608

HDU 3613 Best Reward(拓展KMP算法求解)

题目链接: https://cn.vjudge.net/problem/HDU-3613 After an uphill battle, General Li won a great victory. Now the head of state decide to reward him with honor and treasures for his great exploit. ...

aisebu7819的博客 170
上一篇: 【KMP】 hdu2594 Simpsons’ Hidden Talents
下一篇: 【KMP】 hdu4300 Clairewd’s message
ACM_Ted
博客等级 码龄15年 122粉丝 208原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值