我们一位一位地来做,每次判断这一位能否放0,而且要在满足前几位的情况下。用dp来判断

具体来说,设f[i][j]表示前i个划分成j个区间能否满足,那么我们会有转移trans[i][k+1],当区间[i,k]的和在某些位上不是1时trans[i][k+1]=1

这些位,就是正在做的这位和它之前确定下来的取0的位数

那么每次就看f[N+1][A...B]是否有值,就可以确定下来这位答案到底是放0还是1了

这样做的复杂度,是O(n^3logV)的,最后一个子任务过不去

发现最后一个子任务A=1,那我们就可以在dp时少记一维,令f[i]表示使前i个数满足的最小区间数,看最后f{N+1]能否<=B就可以了

(或者像我一样zz地写一个最短路)

有一个要注意的点,就是<<操作,如果超出范围,是要写成类似于1LL<<55这样的

 #include<bits/stdc++.h>
#define pa pair<int,int>
#define ll long long
using namespace std;
const int maxm=,maxn=; inline ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} int N,M,A,B,dis[maxn];
bool tmp[maxn][maxn];
bool trans[maxn][maxn],f[maxn][maxn],flag[maxn];
ll sum[maxn],num[maxn];
priority_queue<pa,vector<pa>,greater<pa> > q; inline bool dp(){
memset(f,,sizeof(f));f[][]=;
for(int i=;i<B;i++){
for(int j=;j<=N;j++){if(!f[i][j]) continue;
for(int k=j+;k<=N+;k++){
if(!trans[j][k]) continue;
f[i+][k]=;
}
}
}bool can=;
for(int i=A;i<=B;i++){
can|=f[i][N+];
}return can;
}
inline bool dijkstra(){
memset(dis,,sizeof(dis));while(!q.empty()) q.pop();
memset(flag,,sizeof(flag));
dis[]=;q.push(make_pair(,));
while(!q.empty()){
int p=q.top().second;q.pop();if(flag[p]) continue;
if(p==N+) break;
for(int i=p+;i<=N+;i++){
if(!trans[p][i]||dis[i]<=dis[p]+) continue;
dis[i]=dis[p]+;q.push(make_pair(dis[i],i));
}
}return dis[N+]<=B;
} inline void solve(){
ll ans=;int i,j,k;
for(i=;i<=N;i++) sum[i]=sum[i-]+num[i];
ll l=sum[N];while(l) M++,l>>=;
memset(trans,,sizeof(trans));
for(int t=M;t;t--){
memcpy(tmp,trans,sizeof(tmp));
for(int i=;i<=N;i++){
for(int j=i;j<=N;j++){
if((sum[j]-sum[i-])&(1LL<<(t-))) trans[i][j+]=;
}
}
bool can=(A==)?dijkstra():dp();
if(!can){
ans|=1LL<<(t-);memcpy(trans,tmp,sizeof(tmp));
}
}
printf("%lld\n",ans);
} int main(){
int i,j,k;
//freopen("1967.in","r",stdin);
N=rd(),A=rd(),B=rd();
for(i=;i<=N;i++) num[i]=rd();
solve();
return ;
}

luogu3646 巴厘岛的雕塑 (dp)的更多相关文章

  1. bzoj 4069 [Apio2015]巴厘岛的雕塑 dp

    [Apio2015]巴厘岛的雕塑 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 494  Solved: 238[Submit][Status][Dis ...

  2. 【BZOJ4069】【APIO2015】巴厘岛的雕塑 [贪心][DP]

    巴厘岛的雕塑 Time Limit: 10 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Description 印尼巴厘岛的公路上有许多的雕塑, ...

  3. 【BZOJ4069】[Apio2015]巴厘岛的雕塑 按位贪心+DP

    [BZOJ4069][Apio2015]巴厘岛的雕塑 Description 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有 N 座雕塑,为方便起见,我们把这些雕塑从 ...

  4. bzoj千题计划239:bzoj4069: [Apio2015]巴厘岛的雕塑

    http://www.lydsy.com/JudgeOnline/problem.php?id=4069 a!=1: 从高位到低位一位一位的算 记录下哪些位必须为0 dp[i][j] 表示前i个数分为 ...

  5. [APIO2015]巴厘岛的雕塑 --- 贪心 + 枚举

    [APIO2015]巴厘岛的雕塑  题目描述 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有\(N\)座雕塑,为方便起见,我们把这些雕塑从 1 到\(N\)连续地进行 ...

  6. bzoj4069【APIO2015】巴厘岛的雕塑

    4069: [Apio2015]巴厘岛的雕塑 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 192  Solved: 89 [Submit][Stat ...

  7. 巴厘岛的雕塑(sculptures)

    巴厘岛的雕塑(sculptures) 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有 N 座雕塑,为方便起见,我们把这些雕塑从 1 到 N 连续地进行标号,其中第 i ...

  8. 巴厘岛的雕塑 BZOJ 4069

    巴厘岛的雕塑 题解: 题意是要求分组使每组的和按位取或的值最小 那么考虑贪心,尽量使高位为0 于是枚举位置,从最高位枚举 假设当前枚举到第l位. 令 f[i][j] 表示前 i 个数分成 j 组,满足 ...

  9. [APIO2015]巴厘岛的雕塑 贪心+DP+特殊数据优化

    写了好久.... 刚刚调了一个小时各种对拍,,,,最后发现是多写了一个等号,,,,内心拒绝 表示一开始看真的是各种懵逼啊 在偷听到某位大佬说的从高位开始贪心后发现可做 首先考虑小数据(因为可以乱搞) ...

随机推荐

  1. [Spark][Python][DataFrame][SQL]Spark对DataFrame直接执行SQL处理的例子

    [Spark][Python][DataFrame][SQL]Spark对DataFrame直接执行SQL处理的例子 $cat people.json {"name":" ...

  2. centos6下redis cluster集群部署过程

    一般来说,redis主从和mysql主从目的差不多,但redis主从配置很简单,主要在从节点配置文件指定主节点ip和端口,比如:slaveof 192.168.10.10 6379,然后启动主从,主从 ...

  3. python基础学习笔记(十一)

    迭代器 本节进行迭代器的讨论.只讨论一个特殊方法---- __iter__  ,这个方法是迭代器规则的基础. 迭代器规则 迭代的意思是重复做一些事很多次---就像在循环中做的那样.__iter__ 方 ...

  4. Code Review —— by12061154Joy

    对结对队友刘丽萍的代码进行了复审: 优点: 1,代码逻辑正确,基本能够完全需求 2,用了不少C#自带的函数,第一次写C#,相信是查阅了不少资料,虽然还有很多地方值得优化,不过第一次能做到这样已经很不错 ...

  5. Individual Project - Word_frequency

    0x00 预先准备和时间规划 1.因为要用到visual studio 2013,准备学习C#,预计一天时间能基本使用. 3.了解需求并设计基本数据结构与大致流程 20min 2.根据提议实现simp ...

  6. 小学四则运算APP 第二次冲刺-第二天

    团队成员:陈淑筠.杨家安.陈曦 团队选题:小学四则运算APP 第二次冲刺阶段时间:11.29~12.09 本次发布的判断题功能界面的设置: activity_panduan_set.xml: < ...

  7. zookeeper安装和使用 windows环境(转)

    原文地址: http://blog.csdn.net/tlk20071/article/details/52028945 简介 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是G ...

  8. Resolved validation conflict with readonly

    /** * Bug绕过去方案WorkAround * Bug描述: * JQuery的Validation的和form的input元素设为readonly,一对不可调和的矛盾: * 一个设置为requ ...

  9. PHP MySql增删改查

    mysql_connect()连接数据库 mysql_select_db选择数据库 mysql_fetch_assoc()获取结果集 mysql_query()执行sql语句 实例如下: <?p ...

  10. 面象对象设计原则之五:依赖倒置原则(The Dependency Inversion Principle,DIP)

    如果说开闭原则是面向对象设计的目标的话,那么依赖倒转原则就是面向对象设计的主要实现机制之一,它是系统抽象化的具体实现.依赖倒转原则是Robert C. Martin在1996年为“C++Reporte ...