首页 > 其他分享 >lg7335 [JRKSJ R1] 异或 题解

lg7335 [JRKSJ R1] 异或 题解

时间:2023-03-03 18:56:22浏览次数:35  
标签:int 题解 lg7335 tp trie 异或 本题

本题的标签中含有trie,但是这道题可以不用trie做。
考虑列出本题的dp方程:设\(f_{k,i}\)表示前\(i\)个数选了\(k\)段的答案,\(s_i\)为数组的前缀异或和
当不选择第\(i\)位,使用\(f_{k,i-1}\)更新\(f_{k,i}\)。当选择第\(i\)位时,枚举选择的区间的左端点\(j+1\),使用\(f_{k-1,j}+s_j\ xor\ s_k\)更新\(f_{k,i}\)。
由于本题数据随机,考虑更为优秀的做法。枚举\(k,i\),设\(a_j=s_j\ xor\ s_i\),则\(a\)可以看做随机数列。
显然\(f_{k,1...n}\)单调递增,所以假设存在\(2\)个位置\(j<k\)且\(a_j<a_k\),那么不用考虑\(j\)。
设\(g_{k}\)表示\(k\)左边的第一个大于\(a_k\)的点(不存在视为\(0\)),则对于\(f_{k,i}\),可行的决策点为\(i,g_i,g_{g_i}...\),即不断地执行\(i=g_i\)操作直到\(i=0\)所经过的非\(0\)点所构成的集合。
根据经典结论,这个集合的大小期望为\(\log_2n\),所以此做法时间复杂度为\(O(n^2\log_2n)\)。

#include<bits/stdc++.h>
using namespace std;
#define N 3010
int g[N][N],n,k,a[N],s[N],tp[N],ans;
long long f[N][N];
int main(){
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		s[i]=s[i-1]^a[i];
		tp[i]=1;
		g[i][1]=i-1;
		for(int j=i-2;~j;j--){
			if((s[i]^s[j])>(s[i]^s[g[i][tp[i]]]))
				g[i][++tp[i]]=j;
		}
	}
	for(int k=1;k<=n;k++){
		for(int i=1;i<=n;i++){
			f[k][i]=max(f[k][i],f[k][i-1]);
			for(int j=1;j<=tp[i];j++)
				f[k][i]=max(f[k][i],f[k-1][g[i][j]]+(s[g[i][j]]^s[i]));
		}
	}
	printf("%lld",f[k][n]);
}

标签:int,题解,lg7335,tp,trie,异或,本题
From: https://www.cnblogs.com/celerity/p/17176658.html

相关文章

  • 【题解】P6271 [湖北省队互测2014]一个人的数论
    很久之前存的古代经典题,思路是cyj的。感谢那时候先辈们的分享精神,这就是十年前的OI圈子吗。思路莫比乌斯反演。首先注意到一个自然数幂次和,令\(F(n)=\sum\limit......
  • 前端问题解决步骤
    总结,有错误看错误,没明显错误看逻辑。F12查看(看连接是否有错误。)在看NetWork查看选项Fetch/XHR(看具体接口对应相关数据是否正确)找后端代码和前端代码的逻辑问题。(swagg......
  • pdf.js 预览时红章、电子签和部分文字无法显示问题解决方案
    pdf红章无法预览的问题修复方案:node_modules/pdfjs-dist/es5/build/pdf.worker.js注释一行代码:this.setFlags(_util.AnnotationFlag.HIDDEN)pdf电子签、部分文字不......
  • trie 树 求最大异或和
    题目:给定一个非负整数数列a,初始长度为N。请在所有长度不超过M的连续子数组中,找出子数组异或和的最大值。子数组的异或和即为子数组中所有元素按位异或得到的结果。......
  • lg8935 [JRKSJ R7] 茎 题解
    由于标签内包含背包和树形dp,所以考虑用背包dp和树形dp求解。考虑每次合并2个连通块(一个包含根节点),设\(f_{i,j}\)表示\(i\)子树内,操作\(j\)次的方案数(未合并连通块),设\(f_{i......
  • [已解决]Android studio连接远程MySQL问题解决
    我电脑安装的是8.0的MySQL,导入使用的jar包是mysql-connector-java-5.0.71、首先先按照大佬的链接配置好一些东西,注意!已经安装8.0版本MySQL的保持原样就行,不用重新安装5.0......
  • istio 常见问题解决
    1.Commanderroroutput:xtablesparameterproblem:iptables-restore:unabletoinitializetable'nat'  Failedtoexecute:iptables-restore--noflush/tmp/i......
  • Everything 搜索失败问题解决
    平时用的好好的Everything突然某一天用不了了,什么东西都搜不出来了……就搜桌面上摆着的文件都搜不出来……下文介绍下我的解决方案解决方案任务栏找到Everything......
  • HBase存储空间撑爆导致拒绝服务的问题解决思路与操作方法记录
    时间:2022年3月29日;问题:tmss数据源切换完成后,源表数据将HBase集群内节点的存储空间撑爆,导致HBase集群内节点拒绝服务;修复:查询HDFS占用空间情况:hdfsdfs-df-h;确认是否......
  • ARC_C题解
    ARC009C错排数\(\times{C(n,k)}\)错排数可以用递推公式:\(D_n=(n-1)\times(D_{n-1}+D_{n-2})\)。具体的原理是考虑\(1\)这个位置是第几个元素填的,假设是\(k\)。分为两种情......