题目链接: http://codeforces.com/problemset/problem/811/C

题意: 给一个有n个人排队上车,去相同地方的人要么坐在同一个车厢,要不就不上车,问最大舒适度和是多少。苏适度是车厢内所有数组成的集合的异或值。

即: 给你n个数,现在让你选一些区间出来,对于每个区间中的每一种数,全部都要出现在这个区间。 每个区间的价值为该区间不同的数的异或值,现在问你这n个数最大的价值是多少。

注意: 相交的区间要么全选要么全不选

思路: dp

dp[i] 存储前 i (即 i 为元素 a[i] 所在区间的右边界)个人最大舒适度值, 对于当前 i , 从 i 往前更新一遍.

动态转移方程式为: dp[i] = max(dp[i], dp[j] + ans) , 其中 ans 为合法区间 [j, i] 的舒适度.

需要先预处理一下 a[i] 所在区间来判断选取区间时的合法性.

代码:

 #include <iostream>
#include <stdio.h>
using namespace std; const int MAXN = 5e3 + ;
int s[MAXN], e[MAXN], a[MAXN], dp[MAXN]; int main(void){
int n;
scanf("%d", &n);
for(int i = ; i <= n; i++){
scanf("%d", &a[i]);
if(!s[a[i]]) s[a[i]] = i;
e[a[i]] = i;
}
for(int i = ; i <= n; i++){
dp[i] = dp[i -];
int vis[MAXN] = {,};
int cnt = s[a[i]], ans = ;
for(int j = i; j > ; j--){
if(!vis[a[j]]){
if(e[a[j]] > i) break;
cnt = min(cnt, s[a[j]]);
ans ^= a[j];
vis[a[j]] = ;
}
if(j == cnt) dp[i] = max(dp[i], dp[j - ] + ans);
}
}
printf("%d\n", dp[n]);
return ;
}

cf811C(预处理&dp)的更多相关文章

  1. BZOJ-1587|前缀和 预处理 dp||叶子合并leaves

    叶子合并leaves Description 在一个美丽的秋天,丽丽每天都经过的花园小巷落满了树叶,她决定把树叶堆成K堆,小巷是笔直的 共有N片树叶(树叶排列也是笔直的),每片树叶都有一个重量值,并且 ...

  2. CodeForces 623B【预处理+DP】

    题意: 给出n,a,b以及n个整数a1,a2-an, 可以对数组进行以下两种操作: (1)花费len*a的代价删除连续的len个数,len<|S| (2)花费b的代价将某一个a[i]加一或减一, ...

  3. UVA 1625 Color Length 颜色的长度 (预处理+dp)

    dp[i][j]表示前一个序列拿了i个颜色,后一个序列拿了j个颜色的最小花费. 转移的时候显然只能向dp[i+1][j],或dp[i][j+1]转移,每增加拿走一个颜色,之前已经出现但没结束的颜色个数 ...

  4. codeforces div2_603 F. Economic Difficulties(树dfs预处理+dp)

    题目连接:http://codeforces.com/contest/1263/problem/F 题意:有n个设备,上和下分别连接着一颗树,上下两棵树每棵树的叶子节点连接一个设备,两棵树的根节点都是 ...

  5. 完美字符子串 单调队列预处理+DP线段树优化

    题意:有一个长度为n的字符串,每一位只会是p或j.你需要取出一个子串S(注意不是子序列),使得该子串不管是从左往右还是从右往左取,都保证每时每刻已取出的p的个数不小于j的个数.如果你的子串是最长的,那 ...

  6. codeforces 385C Bear and Prime Numbers 预处理DP

    题目链接:http://codeforces.com/problemset/problem/385/C 题目大意:给定n个数与m个询问区间,问每个询问区间中的所有素数在这n个数中被能整除的次数之和 解 ...

  7. hdu---(3555)Bomb(数位dp(入门))

    Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submi ...

  8. RMQ(dp)

    我一开始是不知道有这么个东西,但是由于最近在学习后缀数组,碰到一道题需要用到后缀数组+RMQ解决的所以不得不学习了. 原理:用A[1...n]表示一组数,dp[i][j]表示从A[i]到A[i+2^j ...

  9. HDU 3943 K-th Nya Number(数位DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3943 题目大意:求出区间 (P,Q] 中找到第K个满足条件的数,条件是该数包含X个4和Y个7 Samp ...

随机推荐

  1. php 微信公众平台开发之微信群发信息

    这篇文章主要为大家详细介绍了php微信公众平台开发之微信群发信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.目的 完成在微信公众号中群发消息.这里只是完成简单的文字发送.也可以发送语音图片 ...

  2. javascript通用参数判断

    //判断value是小于等于max的数字function isNumberMax(value, max){    if(!isNumber(value) || !isNumber(max)){     ...

  3. algorithm 简单用法

    algorithm 简单用法 #include <iostream> #include <vector> #include <algorithm> using na ...

  4. Linux下MySQL的数据文件存放在哪里的

    mysql> show variables like '%dir%';+-----------------------------------------+------------------- ...

  5. Java自定义分页标签的实现

    主要字段含义: 页号 pagaNo页面大小 pageSize总记录条数 recordCount计算本次一共分多少页 myPageSize页号显示开始 start 页号显示结束 end PageTag需 ...

  6. 转 Django根据现有数据库,自动生成models模型文件

    Django引入外部数据库还是比较方便的,步骤如下 : 创建一个项目,修改seting文件,在setting里面设置你要连接的数据库类型和连接名称,地址之类,和创建新项目的时候一致 运行下面代码可以自 ...

  7. encodeURI,encodeURIComponent编码

    encodeURI().encodeURIComponent().decodeURI().decodeURIComponent() URL编码 Global对象的encodeURI()和encodeU ...

  8. bzoj 3996 线性代数 —— 最大权闭合子图

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3996 把题中的式子拆开看看,发现就是如下关系: 如果 a[i] == 1 && ...

  9. jumpserver遇到的坑

    安装:https://github.com/jumpserver/jumpserver,看readme照着做就行,下面是遇到的坑.   0.4.4版坑: 1.要升级pip,否则有的包装不上   2.p ...

  10. 代码实现跟控制器跳转到storyBoard