Luogu P3646 [APIO2015]巴厘岛的雕塑
深夜写题解系列,话说这题暑假的时候就在LOJ上做掉了,然后今天看到Luogu上有就去交了一下,发现没写过题解,赶紧来补一下
说句题外话APIO2015的题目好水啊
首先考虑按位取或的过程,很显然要从二进制位从高到低贪心,尽量地让这一位能取\(0\),那么就是考虑怎么判断这一位能否取到\(0\)的过程了
考虑直接设一个状态\(f_{i,j}\)表示把前\(i\)个数分成\(j\)段是否满足条件,最后看一下\(f_{n,i}(i\in [A,B])\)是否有\(1\)即可
那么转移也很简单,记录一下前缀和,然后向前枚举一个点转移,那么这段区间和在这一位上必须是\(0\)同时选择这一段不能使答案变大,这个详见代码的转移
因此我们现在有了一个\(O(n^3\log \sum Y_i)\)的做法,可以通过前4个Subtask
那么再看一下第5个Subtask有什么特殊之处,仔细一看会发现它的\(A=1\)!
那么很显然之前的DP之所以会慢就是因为考虑了答案的下界,但现在我们不用考虑了,直接考虑求出分开的最少段数,判断是否小于\(B\)即可,同样转移的方法和上面类似
所以这部分的复杂度是\(O(n^2\log \sum Y_i)\)的,两者综合即可通过此题
#include<cstdio>
#include<iostream>
#include<cstring>
#define RI register int
#define CI const int&
using namespace std;
const int R=40,N=2005;
int n,l,r,a[N]; long long ans;
namespace Case1 //n<=100 solver
{
const int MN=105;
bool f[MN][MN];
inline bool check(CI idx)
{
RI i,j,k; memset(f,0,sizeof(f));
for (f[0][0]=i=1;i<=n;++i) for (j=1;j<=i;++j)
{
long long sum=a[i]; for (k=i-1;~k;--k)
f[i][j]|=f[k][j-1]&&(!((sum>>idx)&1))&&((((sum>>idx)<<idx)|ans)==ans),sum+=a[k];
}
bool flag=0; for (i=l;i<=r;++i) flag|=f[n][i]; return flag;
}
};
namespace Case2 //l=1 solver
{
int f[N];
inline bool check(CI idx)
{
RI i,j; for (memset(f,127,sizeof(f)),f[0]=0,i=1;i<=n;++i)
{
long long sum=a[i]; for (j=i-1;~j;--j)
{
if ((!((sum>>idx)&1))&&((((sum>>idx)<<idx)|ans)==ans))
f[i]=min(f[i],f[j]+1); sum+=a[j];
}
}
return f[n]<=r;
}
};
int main()
{
RI i; for (scanf("%d%d%d",&n,&l,&r),i=1;i<=n;++i) scanf("%d",&a[i]);
for (i=40;~i;--i) if (!(n<=100?Case1::check(i):Case2::check(i))) ans|=(1LL<<i);
return printf("%lld",ans),0;
}
Luogu P3646 [APIO2015]巴厘岛的雕塑的更多相关文章
- Luogu 3646 [APIO2015]巴厘岛的雕塑
初赛成绩出了,和预想的一样,一分都没挂,开心. 大佬的博客 subtask 1 ($n \leq 200$) 因为高位取$0$一定比高位取$1$优,我们考虑按照位从高到低进行检验,设$f_{i, j} ...
- 洛谷P3646 [APIO2015]巴厘岛的雕塑(数位dp)
传送门 话说莫非所有位运算都可以用贪心解决么……太珂怕啦…… 一直把或运算看成异或算我傻逼…… 考虑从高位到低位贪心,如果能使答案第$i$位为0那么肯定比不为$0$更优 然后考虑第$i$位是否能为$0 ...
- 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 座雕塑的年龄 ...
- [APIO2015]巴厘岛的雕塑
题目描述 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有 NN 座雕塑,为方便起见,我们把这些雕塑从 11 到 NN 连续地进行标号,其中第 ii 座雕塑的年龄是 Y ...
- APIO2015巴厘岛的雕塑——数位DP
题目:https://www.luogu.org/problemnew/show/P3646 对于A>1,将答案各位全置1,然后从高位到低位改成0判断是否可行: 用f[i][j]数组代表前i个数 ...
随机推荐
- 构建LVS负载均衡集群——NAT模式(最简单方式)
一.装备一台lvs调度器主机要求两个网卡一个为内部局域网ip,一个为公网ip #IP地址设置过程不再重复 [root@localhost ~]# ip a | grep eth0 #内网ip : et ...
- [Pytorch Bug] "EOFError: Ran out of input" When using Dataloader with num_workers=x
在Windows上使用Dataloader并设置num_workers为一个非零数字,enumerate取数据时会引发"EOFError: Ran out of input"的报错 ...
- tensorflow2.0安装
版本: python3.5 Anaconda 4.2.0 tensorflow2.0 cpu版本 1.安装命令 pip3 install tensorflow==2.0.0.0a0 -i https: ...
- 【mysql报错】[Err] 1248 - Every derived table must have its own alias
当我运行一条联合查询的sql语句时报如下错误: [Err] 1248 - Every derived table must have its own alias,大概意思是每一张派生表必须要有自己的别 ...
- SpringBoot系列之Spring容器添加组件方式
SpringBoot系列之Spring容器添加组件方式 本博客介绍SpringBoot项目中将组件添加到Spring容器中的方法,SpringBoot项目有一个很明显的优点,就是不需要再编写xml配置 ...
- webpack基本使用
webpack安装时的坑 高版本的webpack除了全局安装webpack外,还需安装webpack-cli,在本地使用时也一样需要这样,不然会出错 webpack使用是的坑 在原始启动webpack ...
- python基础(25):面向对象三大特性二(多态、封装)
1. 多态 1.1 什么是多态 多态指的是一类事物有多种形态. 动物有多种形态:人,狗,猪. import abc class Animal(metaclass=abc.ABCMeta): #同一类事 ...
- Java日期时间API系列3-----Jdk7及以前的日期时间类的不方便使用问题
使用Java日期时间类,每个人都很熟悉每个项目中必不可少的工具类就是dateutil,包含各种日期计算,格式化等处理,而且常常会遇到找不到可用的处理方法,需要自己新增方法,处理过程很复杂. 1.Dat ...
- Typescript基础(3)——类
前言 今天继续typescript的学习,开始ts类的学习. 类 类的实现 在ES6中新增了类的概念.我们先看ES6中类的实现. class Person { constructor(name,age ...
- ES6入门系列 ----- 使用Proxy 实现观察者模式
观察者模式是指函数自动观察数据对象的变化, 一旦对象有变化,函数就会自动执行. 它定义了一种一对多的依赖关系,我们用Proxy来实现一个简单的观察者模式(PS: 初学我们认为 观察者模式 == 发布订 ...