• cdqz2017暑假集训 0630


    cdqz2017暑假集训 0630

    ・所有编译命令均不开启氧 2 优化・
    ・题目 √ 良心认证・

    作为一名普通高中生在放学路上遇到了传说中高一就虐了日本国家队的YJQ并与他谈笑风生之后居然不知不觉地领悟了早已失传的读入优化黑暗技术的我难道来自异世界?! 』杯 ORZ赛

    这事ao的

    ようこそ

    首先有n^4区间dp+预处理。这个自带1/12常数,应该可以过100。

    还有30分 (c_ileq 10)的可能就(3^{|C|})枚举一下。

    然后100就把枚举子区间改成讨论选不选最后一个点然后枚举左端点。

    关于预处理想了一下,对于同一起点开个变量记录有无/最远的 r 的位置

    #include<bits/stdc++.h>
    #define FOR(i,a,b) for(int i=a;i<=b;++i)
    #define ROF(i,a,b) for(int i=a;i>=b;--i)
    #define ll long long
    using namespace std;
    const int N = 5e3+200;
    int read(){
    	int x=0,pos=1;char ch=getchar();
    	for(;!isdigit(ch);ch=getchar()) if(ch=='-') pos=0;
    	for(;isdigit(ch);ch=getchar()) x=(x<<1)+(x<<3)+ch-'0';
    	return pos?x:-x; 
    } 
    int n,c[N],l[N],r[N],f[N],vis[N];
    int ok[N][N];
    int main(){
    	n=read();
    	FOR(i,1,n){
    		c[i]=read();
    		if(!l[c[i]]) l[c[i]]=i;
    		r[c[i]]=i;
    	}
    	FOR(i,1,n){
    		int tp=0,val=0;
    		memset(vis,0,sizeof vis);
    		FOR(j,i,n){
    			if(!vis[c[j]]){
    				if(l[c[j]]<i){
    					FOR(k,j,n){
    						ok[i][k]=-1; 
    					} 
    					break;
    				}
    				vis[c[j]]=1;
    				val^=c[j];
    				tp=max(tp,r[c[j]]);
    			} 
    			if(j==tp) tp=0;
    			if(tp==0){
    				ok[i][j]=val;
    			}else ok[i][j]=-1;
    		}
    	}
    	FOR(i,1,n){
    		f[i]=f[i-1];
    		FOR(j,1,i){
    			if(ok[j][i]){
    				f[i]=max(f[i],f[j-1]+ok[j][i]);
    			}
    		}
    	}
    	printf("%d",f[n]);
    	return 0;
    }
    

    ジャパリ

    鹰蛋问题

    パーク

    数据结构/排序

    感觉这几套题是普及组啊,还是做HN省选集训吧

  • 相关阅读:
    Unity—Json2
    Unity—Json1
    windows 命令行报错:file(s) not in client view
    winform listbox 使用DrawMode使用OwnerDrawVarialbe或OwnerDrawFixed无水平滚动条
    windows 命令行使用p4
    winform listbox增加鼠标双击事件
    lua5.3+luasocket
    centos 安装glide工具(golang)笔记
    centos 安装golang笔记
    centos安装redis,并设置开机自动启动项
  • 原文地址:https://www.cnblogs.com/lcyfrog/p/13025641.html
Copyright © 2020-2023  润新知