zoukankan      html  css  js  c++  java
  • 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省选集训吧

  • 相关阅读:
    selenium基础(鼠标和键盘事件)
    Java:面向对象三大特征
    Java:面向对象(上)
    Java:数组
    Java:方法
    Java基础:程序结构控制
    Java基础:用户交互Scanner
    Java基础语法(下)
    Jenkins(Extended E-mail Notification)邮箱配置正确但是并没有发送邮件
    接口自动化测试与Jenkins集成(Freestyle project任务版)
  • 原文地址:https://www.cnblogs.com/lcyfrog/p/13025641.html
Copyright © 2011-2022 走看看