C. Vladik and Memorable Trip 解析(思維、DP)
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)的更多相关文章
- 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 ...
 - C. Vladik and Memorable Trip DP
		
C. Vladik and Memorable Trip time limit per test 2 seconds memory limit per test 256 megabytes input ...
 - 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 ...
 - A. Arena of Greed 解析(思維)
		
Codeforce 1425 A. Arena of Greed 解析(思維) 今天我們來看看CF1425A 題目連結 題目 略,請直接看原題. 前言 明明是難度1400的題目,但總感覺不是很好寫阿, ...
 - E. Almost Regular Bracket Sequence 解析(思維)
		
Codeforce 1095 E. Almost Regular Bracket Sequence 解析(思維) 今天我們來看看CF1095E 題目連結 題目 給你一個括號序列,求有幾個字元改括號方向 ...
 - C2. Power Transmission (Hard Edition) 解析(思維、幾何)
		
Codeforce 1163 C2. Power Transmission (Hard Edition) 解析(思維.幾何) 今天我們來看看CF1163C2 題目連結 題目 給一堆點,每兩個點會造成一 ...
 - F. Moving Points 解析(思維、離散化、BIT、前綴和)
		
Codeforce 1311 F. Moving Points 解析(思維.離散化.BIT.前綴和) 今天我們來看看CF1311F 題目連結 題目 略,請直接看原題. 前言 最近寫1900的題目更容易 ...
 - B. Two Arrays 解析(思維)
		
Codeforce 1417 B. Two Arrays 解析(思維) 今天我們來看看CF1417B 題目連結 題目 略,請直接看原題. 前言 a @copyright petjelinux 版權所有 ...
 - C. k-Amazing Numbers 解析(思維)
		
Codeforce 1417 C. k-Amazing Numbers 解析(思維) 今天我們來看看CF1417C 題目連結 題目 略,請直接看原題. 前言 我實作好慢... @copyright p ...
 
随机推荐
- zabbix安装要求
			
zabbix server 和 zabbix Agent都在一个压缩包中,可以从官网上下载源码包,www.zabbix.com/download.php zabbix是C语言编写,压缩包的文件夹介绍: ...
 - JUC并发编程--AQS
			
转自: https://www.jianshu.com/p/d8eeb31bee5c 前言 在java.util.concurrent.locks包中有很多Lock的实现类,常用的有Reentrant ...
 - NIO 实现简单群聊功能
			
服务端: package com.yang.runnable; import java.io.IOException; import java.net.InetSocketAddress; impor ...
 - Python-对字典进行排序
			
案例: 某班英语成绩以字典的形式存储为: {'lili':78, 'jin':50, 'liming': 30, ......} 依据成绩高低,进行学生成绩排名 如何对字典排序? 方法1: #!/us ...
 - 深入解读 ASP.NET Core 身份认证过程
			
长话短说:上文我们讲了 ASP.NET Core 基于声明的访问控制到底是什么鬼? 今天我们乘胜追击:聊一聊ASP.NET Core 中的身份验证. 身份验证是确定用户身份的过程. 授权是确定用户是否 ...
 - sort函数居然能改变元素值?记一次有趣的Bug——四数之和
			
坐标leetcode: 我想都不想直接深度优先搜索暴力求解: class Solution { public: vector<vector<int>> res; //答案 in ...
 - 092 01 Android 零基础入门  02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门  02 Java面向对象 02 Java封装 02 static关键字 02 static关键字(中)
			
092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
 - C++中stack
			
参考:https://blog.csdn.net/u012655441/article/details/64920825 C++中stack的用法 转载:xueruifan的博客 C++ Stack( ...
 - 最全153道Spring全家桶面试题,你都碰到过哪些?(含答案解析)
			
前言 Spring 框架自诞生以来一直备受开发者青睐,有人亲切的称之为:Spring 全家桶. 毋庸置疑,Spring 早已成为 Java 后端开发的行业标准,无数的公司选择 Spring 作为基础的 ...
 - 解决mybatis-plus更新数据的时候,有值为空导致更新失败的问题
			
问题 在用mybatis-plus更新数据的时候,更新失败,错误信息如下: Cause: org.apache.ibatis.type.TypeException: Could not set par ...