Codeforce 811 C. Vladik and Memorable Trip 解析(思維、DP)

今天我們來看看CF811C

題目連結

題目

給你一個數列,一個區段的數列的值是區段內所有相異數的\(XOR\)總和。你可以選任意多的區段,求最大的所有區段的值的總和。然而所有同樣的數字不是完全沒有被包含在區段裡,不然就是要全部在同個區段裡。

前言

這題我一直到看了解答才知道為什麼不是\(O(n)\),題目一直沒搞清楚

想法

這題的難點在,很難用\(O(n^2)\)以下找到一個真正的可行的區段。

此題的做法是線性DP,\(dp[i]\)為考慮到數列的第\(i\)個時的解答,而要計算\(i+1\),我們只需要多考慮是否有個區段是在\(i+1\)結尾。

首先可以\(O(n)\)得到每個數字最左和最右邊在哪裡,每當要計算\(dp[i+1]\)時,先看看\(i+1\)這個位置是否是某個數字的最右的位置,接著從\(i+1\)位置開始往回看,如果目前看的元素的最右位置超出\(i+1\),代表目前\(i+1\)不可能是某個區段的結尾,那麼\(dp[i+1]=dp[i]\);如果一切正常,直到目前位置已經到了目前看過的所有元素的最左位置,就代表我們已經找到一個結尾在\(i+1\)的區段了,此時\(dp[i+1]=\max\{dp[i],區段的\)XOR\(+\)dp[區段的最左-1]\(\}\)

官方解答有個Challenge,利用\(a\oplus b\le a+b\),可以應付\(n,a[i]\le1e5\)的情況,待之後想到再補吧!

程式碼:

const int _n=5010;
int t,n,a[_n],dp[_n];
bool vis[_n],has[_n];
PII alr[_n];
main(void) {ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n;rep(i,1,n+1){
cin>>a[i];if(!alr[a[i]].fi)alr[a[i]].fi=i;
alr[a[i]].se=i;
}rep(i,1,n+1)if(alr[a[i]].se==i)has[i]=1;
dp[0]=0,dp[1]=(has[1]?a[1]:0);rep(i,2,n+1){
dp[i]=dp[i-1];
if(has[i]){
int val=0,L=alr[a[i]].fi;memset(vis,0,sizeof vis);
int j=i;while(j>=L){
if(alr[a[j]].se>i)goto A;
L=min(L,alr[a[j]].fi);
if(!vis[a[j]])val^=a[j],vis[a[j]]=1;j--;
}
dp[i]=max(dp[i],val+dp[L-1]);
}
A:;
}cout<<dp[n]<<'\n';
return 0;
}

標頭、模板請點Submission看

Submission

C. Vladik and Memorable Trip 解析(思維、DP)的更多相关文章

  1. Codeforces 811 C. Vladik and Memorable Trip

    C. Vladik and Memorable Trip   time limit per test 2 seconds memory limit per test 256 megabytes inp ...

  2. C. Vladik and Memorable Trip DP

    C. Vladik and Memorable Trip time limit per test 2 seconds memory limit per test 256 megabytes input ...

  3. CodeForces - 811C Vladik and Memorable Trip(dp)

    C. Vladik and Memorable Trip time limit per test 2 seconds memory limit per test 256 megabytes input ...

  4. A. Arena of Greed 解析(思維)

    Codeforce 1425 A. Arena of Greed 解析(思維) 今天我們來看看CF1425A 題目連結 題目 略,請直接看原題. 前言 明明是難度1400的題目,但總感覺不是很好寫阿, ...

  5. E. Almost Regular Bracket Sequence 解析(思維)

    Codeforce 1095 E. Almost Regular Bracket Sequence 解析(思維) 今天我們來看看CF1095E 題目連結 題目 給你一個括號序列,求有幾個字元改括號方向 ...

  6. C2. Power Transmission (Hard Edition) 解析(思維、幾何)

    Codeforce 1163 C2. Power Transmission (Hard Edition) 解析(思維.幾何) 今天我們來看看CF1163C2 題目連結 題目 給一堆點,每兩個點會造成一 ...

  7. F. Moving Points 解析(思維、離散化、BIT、前綴和)

    Codeforce 1311 F. Moving Points 解析(思維.離散化.BIT.前綴和) 今天我們來看看CF1311F 題目連結 題目 略,請直接看原題. 前言 最近寫1900的題目更容易 ...

  8. B. Two Arrays 解析(思維)

    Codeforce 1417 B. Two Arrays 解析(思維) 今天我們來看看CF1417B 題目連結 題目 略,請直接看原題. 前言 a @copyright petjelinux 版權所有 ...

  9. C. k-Amazing Numbers 解析(思維)

    Codeforce 1417 C. k-Amazing Numbers 解析(思維) 今天我們來看看CF1417C 題目連結 題目 略,請直接看原題. 前言 我實作好慢... @copyright p ...

随机推荐

  1. SQL Server邮件相关SQL语句出现严重的ASYNC_NETWORK_IO等待事件案例

      DPA监控发现一台SQL Server服务器最近两天执行系统存储过程msdb.dbo.sp_MailItemResultSets中的某个SQL时,出现较严重的ASYNC_NETWORK_IO等待. ...

  2. 后端开发实践:Spring Boot项目模板

    在我的工作中,我从零开始搭建了不少软件项目,其中包含了基础代码框架和持续集成基础设施等,这些内容在敏捷开发中通常被称为"第0个迭代"要做的事情.但是,当项目运行了一段时间之后再来反 ...

  3. iOS14 debug安装的带有flutter应用从桌面图标重新启动时闪退

    刚刚升级遇到的问题,希望能够帮助到遇到相同问题的人. 用xcode12连接iOS设备调试安装应用 拔掉数据线 从桌面图标点击进入App必闪退 后来发现是flutter的原因,目前有下面两种个解决方案: ...

  4. spring-boot-route(四)全局异常处理

    在开发中,我们经常会使用try/catch块来捕获异常进行处理,如果有些代码中忘记捕获异常或者不可见的一些异常出现,就会响应给前端一些不友好的提示,这时候我们可以使用全局异常处理.这样就不用在代码中写 ...

  5. 【Python】类

    初探类 类定义与函数定义( def语句 )一样必须被执行才会起作用 调用 x.f() 其实就相当于 MyClass.f(x) 补充说明 数据属性会覆盖掉具有相同名称的方法属性 命名方法 方法名称使用大 ...

  6. DMZ是什么

    刚刚接触安全域,实在是佩服自己真的是菜,,,啥都不懂,看看过段时间能有多大进步吧... 概念 DMZ:它是一个缓冲区,一个隔离区.它是位于两台防火墙之间的区域,相对于INTER网来说安全级别高一些,但 ...

  7. 刷LeetCode的简易姿势

    近期抽空刷了刷LeetCode,算是补补课. 由于不是很习惯直接在网页上Coding&Debug,所以还是在本地环境下进行编码调试,觉得基本OK后再在网页上提交. 主要采用Python3进行提 ...

  8. excel——VlookUp函数的使用

    VlookUp函数,查询两个表中的相同字段数据,并将需要引用的数据从B表填充到A表 1.打开A表,将需要查询的列选中 在需要引用的列输入 = 在上方,函数选择中选择VLOOKUP函数 Windows: ...

  9. Java源码详解系列(十一)--Spring的使用和源码

    Spring 是一个一站式的 Java 框架,致力于提高我们项目开发的效率.通过 Spring,我们可以避免编写大量额外代码,更专注于我们的核心逻辑.目前,Spring 已经成为最受欢迎的 Java ...

  10. dockerfile解析过程

    什么是dockerfile? DockerFile是用来构建docker镜像的文件,是由一系列命令和参数组成. 构建步骤? 1.编写dockerfile文件 2.docker build 3.dock ...