[APIO2015]巴厘岛的雕塑
题目描述
印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道。
在这条主干道上一共有 NN 座雕塑,为方便起见,我们把这些雕塑从 11 到 NN 连续地进行标号,其中第 ii 座雕塑的年龄是 Y_iYi 年。为了使这条路的环境更加优美,政府想把这些雕塑分成若干组,并通过在组与组之间种上一些树,来吸引更多的游客来巴厘岛。
下面是将雕塑分组的规则:
这些雕塑必须被分为恰好 XX 组,其中 A \leq X \leq BA≤X≤B,每组必须含有至少一个雕塑,每个雕塑也必须属于且只属于一个组。同一组中的所有雕塑必须位于这条路的连续一段上。
当雕塑被分好组后,对于每个组,我们首先计算出该组所有雕塑的年龄和。
计算所有年龄和按位取或的结果。我们这个值把称为这一分组的最终优美度。
请问政府能得到的最小的最终优美度是多少?
输入输出格式
输入格式:
输入的第一行包含三个用空格分开的整数 N, A, BN,A,B。
第二行包含 N 个用空格分开的整数 Y_1, Y_2, ,,, Y_N
输出格式:
输出一行一个数,表示最小的最终优美度。
输入输出样例
6 1 3
8 1 2 1 5 4
11
说明
【样例解释】
将这些雕塑分为 22 组,(8, 1, 2)(8,1,2) 和 (1, 5, 4)(1,5,4),它们的和是 (11)(11) 和 (10)(10),最终优美度是 (11 \mathbin{\mathrm{OR}} 10) = 11(11OR10)=11。(不难验证,这也是最终优美度的最小值。)
有两种子任务:
part 1: n<=100,A,B<=n;
part 2: n<=2000,A=1,B<=n。
(神TM一直把取或看成异或,,,)
位运算的最优化问题很多都可以拆位贪心的,因为我们让高位尽量不为1了之后,答案肯定比这位是1要更优。
所以我们总体的思路就是从高位到低位每一位判断它是否可以为0,并且还要保证之前为0的更高位现在还是0。
因为是取或,所以如果答案的这一位是0的话,就意味着每一组的和的这一位都是0。
1.对于第一个子任务,设dp[i][j]为前i棵树分成j组可不可行(bool 数组就行了)。
2.对于第二个子任务,设dp[i]为前i棵树分成的最小组数(因为A=1,所以在合法的情况下肯定是组数越少越好)
转移不难,懒得写了。
(以后请在做题之前估算好数据范围23333)
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll ci[],n,A,B;
bool dp[][];
ll f[],s[];
ll alr,tp,all; inline void solve1(){
for(int i=tp;i>=;i--){
alr|=ci[i];
memset(dp,,sizeof(dp));
dp[][]=; for(int j=;j<n;j++)
for(int u=;u<=j;u++) if(dp[j][u]){
for(int k=j+;k<=n;k++) if(!((s[k]-s[j])&alr)) dp[k][u+]=;
} bool fl=;
for(int j=A;j<=B;j++) if(dp[n][j]){
fl=;
break;
}
if(!fl) alr^=ci[i];
}
} inline void solve2(){
for(int i=tp;i>=;i--){
alr|=ci[i];
memset(f,0x3f,sizeof(f));
f[]=; for(int j=;j<=n;j++)
for(int u=;u<j;u++) if(!((s[j]-s[u])&alr)) f[j]=min(f[j],f[u]+); if(f[n]>B) alr^=ci[i];
}
} int main(){
ci[]=;
for(int i=;i<=;i++) ci[i]=ci[i-]+ci[i-]; scanf("%lld%lld%lld",&n,&A,&B);
for(int i=;i<=n;i++){
scanf("%lld",s+i);
s[i]+=s[i-];
} for(int i=;i>=;i--) if(s[n]&ci[i]){
tp=i,all=ci[i+]-;
break;
} if(A>) solve1();
else solve2(); printf("%lld\n",all^alr);
return ;
}
[APIO2015]巴厘岛的雕塑的更多相关文章
- bzoj千题计划239:bzoj4069: [Apio2015]巴厘岛的雕塑
http://www.lydsy.com/JudgeOnline/problem.php?id=4069 a!=1: 从高位到低位一位一位的算 记录下哪些位必须为0 dp[i][j] 表示前i个数分为 ...
- [APIO2015]巴厘岛的雕塑 --- 贪心 + 枚举
[APIO2015]巴厘岛的雕塑 题目描述 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有\(N\)座雕塑,为方便起见,我们把这些雕塑从 1 到\(N\)连续地进行 ...
- bzoj 4069 [Apio2015]巴厘岛的雕塑 dp
[Apio2015]巴厘岛的雕塑 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 494 Solved: 238[Submit][Status][Dis ...
- 【BZOJ4069】[Apio2015]巴厘岛的雕塑 按位贪心+DP
[BZOJ4069][Apio2015]巴厘岛的雕塑 Description 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有 N 座雕塑,为方便起见,我们把这些雕塑从 ...
- 4069: [Apio2015]巴厘岛的雕塑
Description 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有 N 座雕塑,为方便起见,我们把这些雕塑从 1 到 N 连续地进行标号,其中第 i 座雕塑的年龄 ...
- Luogu P3646 [APIO2015]巴厘岛的雕塑
深夜写题解系列,话说这题暑假的时候就在LOJ上做掉了,然后今天看到Luogu上有就去交了一下,发现没写过题解,赶紧来补一下 说句题外话APIO2015的题目好水啊 首先考虑按位取或的过程,很显然要从二 ...
- [APIO2015]巴厘岛的雕塑[按位贪心+dp]
题意 给你长度为 \(n\) 的序列,要求分成 \(k\) 段连续非空的区间,求所有区间和的 \(or\) 最小值. 分析 定义 \(f_{i,j}\) 表示前 \(i\) 个点分成 \(j\) 段的 ...
- [BZOJ4069][Apio2015]巴厘岛的雕塑
题目大意 分成 \(x\) 堆,是的每堆的和的异或值最小 分析 这是一道非常简单的数位 \(DP\) 题 基于贪心思想,我们要尽量让最高位的 \(1\) 最小, 因此我们考虑从高位向低位进行枚举,看是 ...
- [APIO2015]巴厘岛的雕塑 贪心+DP+特殊数据优化
写了好久.... 刚刚调了一个小时各种对拍,,,,最后发现是多写了一个等号,,,,内心拒绝 表示一开始看真的是各种懵逼啊 在偷听到某位大佬说的从高位开始贪心后发现可做 首先考虑小数据(因为可以乱搞) ...
随机推荐
- Vim使用小记(二)插件管理
By francis_hao Mar 8,2017 Vundle Vundle,全称为Vim bundle,是一个插件管理器.可以对vim插件进行安装和卸载. Vundle的安装方法看这里[参考 ...
- 2016广东工业大学校赛 E题 GDUT-oj1173
Problem E: 积木积水 Description 现有一堆边长为1的已经放置好的积木,小明(对的,你没看错,的确是陪伴我们成长的那个小明)想知道当下雨天来时会有多少积水.小明又是如此地喜欢二次元 ...
- [hdu 1067]bfs+hash
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1067 queue里面果然不能放vector,还是自己写的struct比较省内存…… #include& ...
- POJ2289:Jamie's Contact Groups(二分+二分图多重匹配)
Jamie's Contact Groups Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/ ...
- win7下用U盘装ubuntu双系统 安装完后进入ubuntu黑屏光标问题
背景:原有win7系统,电脑中有ssd固态硬盘和电脑自带硬盘,win7是装在ssd盘上的 U盘安装ubuntu:已有之前保存的ubunbu镜像文件.iso U盘一块至少1G(我的是4G),将U盘资料备 ...
- JS知识总结
1.javascript继承机制 原型继承,访问对象属性时,如果对象内部有就返回,找不到就会从对象原型指向的对象原型中查找,一层一层的查找,直到最顶层的对象原型还找不到,就返回undefined. 2 ...
- 数学:乘法逆元-拓展GCD
乘法逆元应用在组合数学取模问题中,这里给出的实现不见得好用 给出拓展GCD算法: 扩展欧几里得算法是指对于两个数a,b 一定能找到x,y(均为整数,但不满足一定是正数) 满足x*a+y*b=gcd(a ...
- 在DirectX11下用Stencil Buffer绘制可视化Depth Complexity
这是一道在<Introduction to 3D Game Programming with DirectX 11>上的练习题. 要求把某个像素点上的Depth Complexity(深度 ...
- linux中的阻塞机制及等待队列【转】
转自:http://www.cnblogs.com/gdk-0078/p/5172941.html 阻塞与非阻塞是设备访问的两种方式.驱动程序需要提供阻塞(等待队列,中断)和非阻塞方式(轮询,异步通知 ...
- 《JavaScript模式》精要
P25. 如何避免eval()定义全局变量? 如: var jsstring = "var un = 1;"; eval(jsstring); console.log(typeof ...