• 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省选集训吧

  • 相关阅读:
    SVN访问配置及常用操作
    SVN配置
    在Eclipse中创建maven项目
    Maven的基础之环境配置
    线程池理解
    JVM之类的生命周期
    JAVA代码编程规范
    Jquery实现div局部页面刷新中js渲染失效问题解决
    觅踪17
    第十四周进度
  • 原文地址:https://www.cnblogs.com/lcyfrog/p/13025641.html
Copyright © 2020-2023  润新知