Description
小D是雅礼高一著名的神犇,在NOI同步赛中获得了满分的优异成绩,而全国没有任何其他人获得如此的成绩。
某天晚上,高一内部在讨论一道题目,然而包括小D之内的各种神犇都毫无头绪,这时候,高二的人赢小T上来给高二进行了精彩的讲解。
小D被小T的神犇气场所折服,他知道小T之所以没有同步赛满分是不屑于,于是他决定拜小T为师。
一日小T正在给小D讲解后缀数组。
“把一个字符串的所有非空后缀按字典序从小到大排序,然后按顺序排列出后缀的第一个字符在原串中的位置所形成的数组,就是后缀数组。如“ababa”的后缀数组就是{5, 3, 1, 4, 2}。”
这里的位置从1开始编号,字符串仅包含小写英文字母。
接着小T给小D讲解了它的构造过程。
小D毕竟身为同步赛满分,水平还是不低,他立即举一反三:既然我们能给定一个字符串,给出他的后缀数组,那么给定后缀数组,能不能恢复字符串呢。
小T说:“这是不行的,这个问题我几年前研究过,譬如说,假设你后缀数组是{2, 1},那么原串既可以是“aa”,也可以是“ bb”。然而,我们的确可以提出一些有趣的问题,我记得我小学的时候,研究过一个问题,给定一个长度为n的数组A,以及一个n × 26 的矩阵w,所有下标都从1开始,其中w_{i, j}表示第i个位置填第j个小写字母的价值,现在你需要给出一个长度为n的字符串,使得它的后缀数组是A,而且它每个位置的价值和最大。}这个问题可不简单,我小学的时候研究了整整一节课。”
小D想了想,觉得自己大概就算在小学也只要一节课就想得出来。各位做题人你们会做吗?

Input
为了减少输入量,部分数据将在程序内生成。
有一个随机数产生器,有个内部变量x初始时为x_0,每次产生随机数时它会将x变为(100000005x + 1532777326) mod 998244353,然后返回x/100取下整。(a mod b 表示a除以 b的余数,该运算的优先级高于加减法。)
输入一行两个两个整数n, x_0。
首先输入一个1到n的排列,表示数组A,A的定义如题所述。
接着你将按照先i递增,再j递增的顺序生成w_{i, j}。每次生成一个随机数r,则w_{i, j} = r mod {10^4}。

Output
为了减少输出量,你只需要输出最大的价值和,不需要给出对应的字符串。
输出一行一个整数表示最大的价值和。

Sample Input
输入1:
1 493941464
1
输入2:
2 736594838
1 2
输入3:
5 910387714
1 2 3 4 5
输入4:
15 892431401
8 5 9 1 2 7 11 3 14 15 13 10 12 6 4

Sample Output
输出1:
9490
样例1解释:
答案即为权值最大的字母的权值,计算得f的权值为9490最大。前六个字母的权值依次为5602, 7113, 5633, 756, 8496, 9490。
输出2:
16658
样例2解释:
计算得“sw”的权值为16658最大,注意虽然“wf” 的权值是17957,但是它的后缀数组为{2, 1},不满足条件;“ww”的权值为16935,但由于“w” 的字典序小于“ww” 所以后缀数组也是{2, 1}。
输出3:
44455
样例3解释:
对应的字符串为“hoooq”。
输出4:
129724

Data Constraint
对于前20%的数据,n ≤ 5。
对于前40%的数据,n ≤ 15。
对于前60%的数据,n ≤ 1000。
对于前100%的数据,n ≤ 100000,0 ≤ x_0 ≤ 998244353。保证存在一个仅含小写英文字母的字符串,使得它的后缀数组为A。

.
.
.
.
.
分析
设f[i][j]为排名第i的后缀开头是j字母的最大权值。

f[i][j] 由f[i-1][k] 转移而来,转移有两种情况。

‘a’<=k<j : f[i][j] = max(f[i-1][k] )+w[a[i]][j];
k==j
重点是第二种情况怎么处理。

i-1的排名比i前,他们的开头又一样,因此i-1的长度比i短。

rank[i]表示第i个位置开始的后缀的排名,rank[a[i]]=i;

只需要判断rank[ai + 1]是否大于 rank[a[i-1] +1]

具体意思就是

看ai +1 这个位置的后缀排名,是否大于a[i]+1这个位置的后缀排名

若ai+1这个位置的后缀排名大于a[i-1] +1这个位置的后缀排名,那么当k==j,两个字符串前面都加上同样的字符,字典序大小关系不变。

k==j :f[i][j] = max(f[i][j] , f[i-1][j] + w[a[i]][j])(rank[ai + 1]> rank[a[i-1] +1])

时间复杂度:O(n)
注意i枚举的是a[i]的下标

.
.
.
.
.
.
程序:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;long long n,x;
long long a[100010],f[100010][30];
long long rank[100010],w[100010][30];int main()
{scanf("%lld%lld",&n,&x);for (long long i=1;i<=n;i++)scanf("%lld",&a[i]);for (long long i=1;i<=n;i++)for (int j=0;j<26;j++){x=(x*100000005+1532777326)%998244353;w[i][j]=x/100 %10000;}for (long long i=1;i<=n;i++)rank[a[i]]=i;for (long long i=0;i<26;i++)f[1][i]=w[a[1]][i];for (long long i=2;i<=n;i++){for (int j=0;j<26;j++){for (int k=0;k<j;k++)f[i][j]=max(f[i][j],f[i-1][k]+w[a[i]][j]);if (rank[a[i]+1]>rank[a[i-1]+1]) f[i][j]=max(f[i][j],f[i-1][j]+w[a[i]][j]);}}long long ans=0;for (int i=0;i<26;i++)ans=max(ans,f[n][i]);printf("%lld",ans);return 0;
}

转载于:https://www.cnblogs.com/YYC-0304/p/10458935.html

【五校联考3day2】B相关推荐

  1. 【五校联考3day2】A

    Description 帝国时代3是一款十分刺激的RTS游戏.你需要控制自己的一块殖民地,发展殖民地的经济和军事,最终打败其他殖民地.小L是这个游戏的狂热爱好者.一次小L打算打AI试试身手. 小L发展 ...

  2. 湖南长郡2021高考成绩查询时间,2021年湖南新高考六校、长郡十五校联考时间公布...

    2021年湖南新高考六校.长郡十五校联考时间公布 导读:距离2021年高考时间仅剩不到一百天,各个省份都的高三学子都进入紧张阶段.开始了各种模拟考试.2021届湖南省炎德英才大联考的考试时间也已经公布 ...

  3. 4246. 【五校联考6day2】san (Standard IO)

    4246. [五校联考6day2]san (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed Limits D ...

  4. jzoj4230. 【五校联考4day1】淬炼神体(B组——Day3)

    jzoj4230. [五校联考4day1]淬炼神体 题目 Description 王仙女将你提供的答案填在<葵花宝典>上,突然,宝典发出耀眼的白光,一股强大的吸力瞬间将仙女吸入宝典中. 一 ...

  5. JZOJ 4238. 【五校联考5day2】纪念碑

    Description 2034年,纪念中学决定修建校庆100周年纪念碑,作为杰出校友的你被找了过来,帮校方确定纪念碑的选址. 纪念中学的土地可以看作是一个长为n,宽为m的矩形.它由n* m个1*1的 ...

  6. 【五校联考7day1】n染色

    Description WYF画了一个极为不规则的n边形,画面太美简直不看,没有任意两条边长度是相等的.因为形状太难看了,做他同桌的CWQ看不下去了,趁着WYF上厕所的时间准备用他书包里的m种颜色的彩 ...

  7. 【五校联考7day2】QYQ的图

    Description 给你一个n个点,m条边的无向图,每个点有一个非负的权值ci,现在你需要选择一些点,使得每一个点都满足: 如果这个点没有被选择,则与它有边相连的所有点都必须被选择. 问:满足上述 ...

  8. 【五校联考7day1】游戏

    Description WYF从小就爱乱顶,但是顶是会造成位移的.他之前水平有限,每次只能顶出k的位移,也就是从一个整点顶到另一个整点上.我们现在将之简化到数轴上,即从 一个整点可以顶到与自己相隔在k ...

  9. 【五校联考6day2】san

    Description 小明经常去N 个地点,其中有些地点之间有直接的无向道路(共M 条这样的道路),可以直接互相到达,这些道路的长短不一.由于小明对这些道路都很熟悉,无论起点和终点在哪里,总能走最短 ...

最新文章

  1. LuoguP2617 Dynamic Rankings (动态主席树学习理解)
  2. spoolsv.exe占CPU100% 的解决方法
  3. 2.5 指数加权平均的偏差修正-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  4. BOOST_VMD_ASSERT_IS_TYPE宏相关的测试程序
  5. oracle 数据导入 数据和备注(comment)乱码问题解决办法
  6. python正十三边形_一起学python-opencv十三(直方图反向投影和模板匹配)
  7. Ubuntu系统下Python虚拟环境构建详解
  8. linux登录成功后提示信息
  9. 【AI视野·今日NLP 自然语言处理论文速览 第二十期】Thu, 8 Jul 2021
  10. SpringCloud_004_SpringCloud服务发现组件原理介绍
  11. 欧美经典歌曲100首(51-100…
  12. 增量式PID计算公式完整详细推导过程
  13. 博科光纤交换机默认密码更改
  14. 国内三大常见核心期刊体系-CSSCI、CSCD与中文核心
  15. matplotlib用Times New Roman且不加粗
  16. QQ客户端管理聊天记录漫游功能 | 解决经常弹窗消息漫游安全验证,QQ服务独立密码的问题
  17. JavaWeb的jsp文件EL表达式简写优先级
  18. 【转载】sql 另一个安装程序实例已在运行
  19. 英语六级语法:强调句,倒装句和虚拟语气
  20. 心理健康情绪管理主题PPT模板

热门文章

  1. 科大星云诗社动态20210222
  2. 学长毕业日记 :本科毕业论文写成博士论文的神操作20170326
  3. 《TensorFlow 机器学习方案手册》(附 pdf 和完整代码)
  4. 重磅 | AI 圣经 PRML《模式识别与机器学习》官方开源了!
  5. 吴恩达《优化深度神经网络》精炼笔记(3)-- 超参数调试、Batch正则化和编程框架...
  6. 修改 IE 查看源文件默认工具
  7. python中的magic方法
  8. EasyGui的用法简介
  9. BugkuCTF-Misc:Linux
  10. (char*)malloc(sizeof(char))有什么用,为什么要这么写——简单介绍指针