CodeForces 811C Vladik and Memorable Trip】的更多相关文章

C. Vladik and Memorable Trip time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Vladik often travels by trains. He remembered some of his trips especially well and I would like to tell you ab…
<题目链接> 题目大意: 给你n个数,现在让你选一些区间出来,对于每个区间中的每一种数,全部都只能出现在这个区间. 每个区间的价值为该区间不同的数的异或值之和,现在问你这n个数最大的价值是多少. 解题分析:因为要同一种的所有数只能出现在同一区间,所以我们先对这$n$个数进行预处理,得到他们每种数的最左边的坐标和最右边的坐标.因为数据只有5000,所以状态可以比较暴力地更新,枚举最后一个异或的区间进行更新,用dp值来记录. $dp[i]$表示$[1,i]$中异或值之和的最大值.第$i$个可以选或…
$dp$. 记录$dp[i]$表示以位置$i$为结尾的最大值. 枚举最后一段是哪一段,假设为$[j,i]$,那么可以用$max(dp[1]...dp[j-1]) + val[j][i]$去更新$dp[i]$. 判断区间是否合法可以记录选择每个位置必须需要取到的最小位置和最大位置,判断区间合法性的时候就只需判断区间内每一个数字的最小位置和最大位置是否均在该区间内. #include <iostream> #include <cstdio> #include <cstring&g…
http://codeforces.com/contest/811/problem/C [题意] 给定一个自然数序列,在这个序列中找出几个不相交段,使得每个段的异或值之和相加最大. 段的异或值这样定义:段中每个不同数字(不重复)相异或. 段有这样的要求:段中任意一个数字不会在段外出现. [思路] 首先预处理每个数字第一次出现和最后一次出现的位置,这样对于一个区间[l,r]就很容易判断是否为满足题意的段. 然后区间DP,dp[i]表示子序列[1,i]的最大值. 状态转移:对于dp[i],最小值为d…
原题链接:http://codeforces.com/contest/811/problem/C 题意:将数组中的连续数字连成若干个“线段”(或者不连),其实就是区间.区间必须满足对于其中的任意数字,能够覆盖数组中的所有相等数字,比如对数组:1, 2, 5, 2 ,5,    [2, 5 ,2 ,5]是满足条件的区间,而[2, 5, 2]不是,因为它并没有包含所有的5. 题目求不相交的满足条件的区间内不同数字的异或和的最大值. 思路:这是一道普通的DP题,类似最长上升子序列,先求出每个数字的最长…
C. Vladik and Memorable Trip   time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Vladik often travels by trains. He remembered some of his trips especially well and I would like to tell you…
Vladik and Memorable Trip CodeForces - 811C 有一个长度为 n 的数列,其中第 i 项为 ai. 现在需要你从这个数列中选出一些互不相交的区间,并且保证整个数列中所有相同的数都在同一个区间中或都不在任意一个区间中. 要求最大化每个区间所有数去重后的异或和的总和.输出这个总和. 预处理出每个数字第一个出现的位置和最后一个出现的位置.以及每个区间内不同数字的异或和. dp[i]表示考虑到前i个数,最大值是多少.分情况讨论一下即可. #include <cst…
C. Vladik and Memorable Trip time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Vladik often travels by trains. He remembered some of his trips especially well and I would like to tell you ab…
Codeforce 811 C. Vladik and Memorable Trip 解析(思維.DP) 今天我們來看看CF811C 題目連結 題目 給你一個數列,一個區段的數列的值是區段內所有相異數的\(XOR\)總和.你可以選任意多的區段,求最大的所有區段的值的總和.然而所有同樣的數字不是完全沒有被包含在區段裡,不然就是要全部在同個區段裡. 前言 這題我一直到看了解答才知道為什麼不是\(O(n)\),題目一直沒搞清楚 @copyright petjelinux 版權所有 觀看更多正版原始文章…
http://codeforces.com/contest/811/problem/C 题意: 给出一行序列,现在要选出一些区间来(不必全部选完),但是相同的数必须出现在同一个区间中,也就是说该数要么不选,选了就必须出现在同一个区间,最后累加区间不同的数的异或值. 思路: 先预处理,求出每个数的左位置和右位置. d[i]表示分析到第 i 位时的最大值. #include<iostream> #include<algorithm> #include<cstring> #i…