jzoj4227-B【dp,字符串】
正题
题目大意
给定一个后缀数组,和每个地方填不同的字母可以获得的不同权值,求最大权值之和。
解题思路
先用后缀数组aaa计算出每个后缀的排名RankRankRank数组。
然后考虑dpdpdp,首先我们发现对于aia_iai,每个cai≤cai+1c_{a_i}\leq c_{a_{i+1}}cai≤cai+1(ccc表示字符串)。所以我们可以用fi,jf_{i,j}fi,j表示aia_iai的位置填jjj这个字符且前面的aia_iai都填完的最大代价。
这时候我们需要考虑这个位置和上个位置是否可以相同。对于两个子串,头字符相同,我们就会比较后面的字符,而我们已经知道每个后缀的RankRankRank了,直接比较除头字符以外的就好了。
codecodecode
#include<cstdio>
#include<algorithm>
#define N 100010
using namespace std;
int n,seed,w[N][30],a[N],z[N],rank[N],f[N][30],ans;
int mak_ran()
{seed=(long long)(100000005ll*(long long)seed+1532777326ll)%998244353ll;return seed/100;
}
int main()
{scanf("%d%d",&n,&seed);for(int i=1;i<=n;i++)for(int j=0;j<26;j++)w[i][j]=mak_ran()%10000;for(int i=1;i<=n;i++)scanf("%d",&a[i]),rank[a[i]]=i;for(int i=0;i<26;i++){f[1][i]=w[a[1]][i];if(n==1) ans=max(ans,f[1][i]);}for(int i=2;i<=n;i++)for(int j=0;j<26;j++){for(int k=0;k<=j;k++){if(k==j&&rank[a[i]+1]<=rank[a[i-1]+1]) continue;f[i][j]=max(f[i][j],f[i-1][k]+w[a[i]][j]);}if(i==n) ans=max(ans,f[i][j]);}printf("%d",ans);
}
jzoj4227-B【dp,字符串】相关推荐
- 动态规划 —— 线性 DP —— 字符串编辑距离
[概述] 字符串编辑距离,即 Levenshtein 距离,是俄国科学家 Vladimir Levenshtein 提出的概念,是指从一个字符串修改到另一个字符串时,编辑单个字符所需的最少次数,编辑单 ...
- POJ 2817 状态DP 字符串找最多的重复
题意: 给出字符串个数 n 给出n串字符串 找出上下两个字符串重复和最多的个数.. eg: 5 abc bcd cde aaa bfcde 0根据 aaa abc bcd cde bfcde答案就是重 ...
- hdu 1159(DP+字符串最长公共序列)
http://blog.csdn.net/a_eagle/article/details/7213236 公共序列可以用一个二维数组dp[i][j]保存每个点时的最大数字,本质就是一个双向比较. dp ...
- 蓝桥杯 算法训练 Cowboys By Assassin dp+字符串操作
问题描述一个间不容发的时刻:n个牛仔站立于一个环中,并且每个牛仔都用左轮手枪指着他旁边的人!每个牛仔指着他顺时针或者逆时针方向上的相邻的人.正如很多西部片那样,在这一刻,绳命是入刺的不可惜--对峙的场 ...
- CodeForces - 1422E Minlexes(dp+字符串)
题目链接:点击查看 题目大意:对一个长度为 n 的字符串 s 来说,可以进行的操作如下: 选出一个二元对 ( i , i + 1 ) 满足 i >= 0 && i + 1 < ...
- 【2018.3.31】模拟赛之四-ssl2408 句子【dp,字符串】
正题 大意 先给出n个句子,然后给出一个最终句子.最终句子由多个句子加密后组成(可能重复).加密方法就是将字母调换位置,加密代价就是该位置与原来的字母不同的数量.求达到最终句子的最小加密代价 解题思路 ...
- 欢乐纪中某B组赛【2019.1.28】
前言 心态爆炸 成绩 RankRankRank是有算别人的 RankRankRank PersonPersonPerson ScoreScoreScore AAA BBB CCC DDD 333 20 ...
- linux查看占用的命令,linux内存占用查看命令
PLL输出怎么不能配置成我想要的时钟 如下图,我的clk_out7想配置成160M,十几输出变为了150M VI命令----用于检索 装了个虚拟机Ubuntu,命令行模式用VI很不适应,需要学习! 1 ...
- ssl初一组周六模拟赛【2018.3.31】
前言 先说一下成绩: 姓名 成绩 hjq 300 wyc(本人千年老二) 270 zyc 260 xjq 240 lw 223 xxy 220 lrz 200 hzb 200 正题 题目1:ssl24 ...
最新文章
- 【C#串口编程计划】C#串口协议解析 -- 文本数据
- 3D人脸重建和人脸分析常用的数据集汇总
- OpenAI开源机器人模拟Python库mujoco-py:可高效处理并行模拟
- 《SQL入门经典》学习笔记
- Java 中各种锁的介绍
- 操作系统:再见CentOS,将于本月底终止维护!
- Packet Tracer 5.0实验(四) 利用三层交换机实现VLAN间路由
- layui tree ajax刷新,layer 刷新某个页面的实现方法
- YII2 rules 规则验证器
- 单元测试中简单使用Mockito解决Spring Bean依赖树问题
- back propagation反向传播(浅层神经网络分析示例)
- win10mysql服务器修改密码,Windows下mysql修改root密码的4种方法
- express 内存溢出问题分析定位
- 好多粉数据上报之360点睛平台ocpc API上报数据方法
- jpa 清空数据库的写法
- 利用 Python 分析 MovieLens 1M 数据集
- 微信小程序-导航吸顶+view锚点
- 被言情小说泡大的人工智能,随便写几行字都是情诗
- 一个本科渣渣是怎么逆袭从咸鱼到Offer收割机的?大厂面经合集
- 用IDEA进行Java后台开发(三)
热门文章
- 秋招面试我去了拼多多,直接被问JVMGC底层原理和算法,我吊打面试官
- 加时间水印_如何在手机照片上添加时间和日期?打开这个设置即可添加,超方便...
- s6730堆叠_不再只是堆叠硬件 ivvi S6全方位评测
- 数据库年月日时分秒_数据库基本使用系列(二)
- 算法设计与分析——递归与分治策略——全排列
- cheatengine找不到数值_彩票中奖500万,领了还不到一半?这些问题不解决,钱都拿不走...
- leetcode213. 打家劫舍 II
- [Redis6]Redis相关知识介绍
- 如何找到Eclipse左侧项目栏
- 算法-二分搜索-找出最大值和次大值