codeforces 811C Vladik and Memorable Trip
来源:互联网 发布:原装ubuntu的电脑 编辑:程序博客网 时间:2024/05/18 22:40
题意:选择n个区间内所有的元素不能在外部出现,求所有各区间内的集合元素异或和?
思路:先预处理可行的区间,然后扫一波即可。
#include <iostream>#include <cstring>#include <cstdio>#include <map>#include <queue>#include <cmath>#include <algorithm>#include <set>using namespace std;#define LL long longconst int inf=0x7fffffff;int n;int a[5005];int lf[5005];int rf[5005];int dp[5005][5005];int ans[5005];int v[5005];int maxl[5005][16], minl[5005][16];int min(int a, int b){ if (a>b) return b; return a;}int max(int a, int b){ if (a>b) return a; return b;}void S_table(){ int l = int(log((double)n)/log(2.0)); for (int j=1;j<=l;j++) { for (int i=1; i + (1 << (j-1) ) - 1 <=n;++i) { maxl[i][j] = max(maxl[i][j-1], maxl[i + (1 << (j-1) )][j-1]); minl[i][j] = min(minl[i][j-1], minl[i + (1 << (j-1) )][j-1]); } }}int min_getl(int l,int r){ int k = int(log((double)(r-l+1))/log(2.0)); int a2 = min(minl[l][k], minl[r - (1<<k) + 1][k]); return a2;}int max_getr(int l,int r){ int k = int(log((double)(r-l+1))/log(2.0)); int a1 = max(maxl[l][k], maxl[r - (1<<k) + 1][k]); return a1;}int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); if(lf[a[i]]==0) lf[a[i]]=i; rf[a[i]]=i; } for(int i=1;i<=n;i++) { minl[i][0] = lf[a[i]]; maxl[i][0] = rf[a[i]]; } S_table(); for(int i=1;i<=n;i++) { int s=0; memset(v,0,sizeof(v)); for(int j=i;j<=n;j++) { if(!v[a[j]]) { v[a[j]]=1; s^=a[j]; } if(min_getl(i,j)==i&&max_getr(i,j)==j) dp[i][j]=s; } } for(int i=1;i<=n;i++) { ans[i]=ans[i-1]; for(int k=0;k<i;k++) ans[i]=max(ans[i],dp[i-k][i]+ans[i-k-1]); } printf("%d\n",ans[n]); return 0;}
阅读全文
1 0
- codeforces 811C Vladik and Memorable Trip
- codeforces C. Vladik and Memorable Trip DP
- codeforces 811C C. Vladik and Memorable Trip
- Codeforces 811C Vladik and Memorable Trip【Dp】
- Codeforces 811C Vladik and Memorable Trip[dp]
- Codeforces 811C Vladik and Memorable Trip DP
- Vladik and Memorable Trip CodeForces
- CF 811C. Vladik and Memorable Trip
- C. Vladik and Memorable Trip
- Codeforces Round #416 (Div. 2)C. Vladik and Memorable Trip
- Codeforces Round #416 C. Vladik and Memorable Trip (DP)题解
- Codeforces Round #416 (Div. 2)-C. Vladik and Memorable Trip
- Codeforces Round #416 (Div. 2) C Vladik and Memorable Trip
- Codeforces811C. Vladik and Memorable Trip
- Codeforces Round #416 (Div. 2) C. Vladik and Memorable Trip(dp)
- Codeforces Round #416 (Div. 2) C. Vladik and Memorable Trip(dp)
- Codeforces Round #416 (Div. 2) C. Vladik and Memorable Trip 【线性DP】
- #416 Div.2 C. Vladik and Memorable Trip
- Javassist Enhancement failed:异常解决方法
- Docker 入门
- 剑指Offer学习之面试题12 :打印1 到最大的n 位数
- 【心灵鸡汤】谁的青春不迷茫
- Vue ---钩子函数
- codeforces 811C Vladik and Memorable Trip
- linux获取网络信息函数
- 冒泡法,熟悉熟悉
- 剑指Offer学习之面试题13 :在O(1)时间删除链表结点
- 索引+索引的类型+创建索引
- 读java编程那些事——查漏补缺
- 1091 线段的重叠
- 详解C语言中的stdin,stdout,stderr
- 探讨世界的本原是什么