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. 趣图:这是拿offer极高的面试经验

      扩展阅读 趣图:面试谈薪资就要这种底气 趣图:IT培训出来找工作 趣图:这是招聘超神级别的程序员?

  2. 使用DynamicExpresso实现表达式求值

    之前写了一篇Z.Expressions表达式计算的博客,直到最近才发现Z.Expressions不是免费的.Z.Expressions从2.0开始支持了NetCore,使用一段时期后会提示许可证到期, ...

  3. Asp.Net Core Log4Net 配置分多个文件记录日志(不同日志级别)

    本文所有配置都是在core3.1环境下. 首先看看最终的效果. 请求监控:对每次请求的相关信息做一个记录. 全局异常:我不想我的错误信息,跟其他的信息混合在一起,查看的时候不大方便. 应用日志:这个主 ...

  4. SSH 框架常见错误

    新手学习SSH框架的时候总会遇到很多问题,一碰到404 或者500错误就不知道怎么解决. 404错误是很常见的一个错误,如果没有用框架基本上只可能是没有这个路径或者文件,但是用了框架之后404的原因就 ...

  5. 2019.7.12 sdfzoier做题统计

    lixf_lixf :9 P1981 表达式求值 P1076 寻宝 P1199 三国游戏 P1308 统计单词数 P1190 接水问题 P1158 导弹拦截 P1070 道路游戏 P1069 细胞分裂 ...

  6. JAVA简单上传图片至七牛

    utils package com.example.demo.utils; import com.alibaba.fastjson.JSONObject; import com.qiniu.commo ...

  7. Spring AOP系列(五)—反射

    前言 前面我们进行了代理模式.静态代理.动态代理的学习.而动态代理就是利用Java的反射技术(Java Reflection),在运行时创建一个实现某些给定接口的新类(也称"动态代理类&qu ...

  8. MySQL系列:Docker安装 MySQL提示错误:Access denied for user'root'@'localhost' (using password:yes)

    问题: 解决方法: 在my.conf文件里配置 [mysqld] skip-grant-tables

  9. Mac 效率工具必备神器 —— Alfred

    前言 alfred 这款软件称为「神器」真是当之无愧.今天专门总结一下,作为之前 Mac 配置教程-开发篇 的补充. 需要说明的是,如果你发现我介绍的功能无法使用,则代表需要花钱购买它的 Powerp ...

  10. 实验 6:OpenDaylight 实验——OpenDaylight 及 Postman 实现流表下发

    一.实验目的 熟悉 Postman 的使用;熟悉如何使用 OpenDaylight 通过 Postman 下发流表. 二.实验任务 流表有软超时和硬超时的概念,分别对应流表中的 idle_timeou ...