传送门

话说莫非所有位运算都可以用贪心解决么……太珂怕啦……

一直把或运算看成异或算我傻逼……

考虑从高位到低位贪心,如果能使答案第$i$位为0那么肯定比不为$0$更优

然后考虑第$i$位是否能为$0$

设$f[i][j]$表示将前$i$个数分为$j$段,能否在最高位到第$i+1$位都与当前$ans$一致的情况下使第$i$位为0,可以的话$f[i][j]$为1,否则为0

考虑状态如何转移

如果$f[k][j-1]$为1且$sum[i]-sum[k]$的第$i$位为0则可以由$f[k][j-1]$转移到$f[i][j]$(其中$sum$表示前缀和)

考虑如何判断,如果$f[k][j-1]==1$且

(下面的$k$和上面那个$k$无关,因为变量有点多重复去了……)

$((sum[i]-sum[k])>>k|ans)== ans$(最高位到倒数第k+1位是否与ans一致)

$((S[i]-S[k])\&1<<(k-1))==0$(倒数第k位能否为0)

那么就可以转移了

对于每个$x$,若$f[n][A~B]$有至少一个为1,$ans$的第$k$位就可以为0

然后因为时间复杂度过不了最后一个子任务……所以$A=1$的时候特判一下……

具体来说就是因为段数只有上限,所以把$f$数组的第二维省掉,就能降一个n

 //minamoto
#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[<<],*p1=buf,*p2=buf;
template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,:;}
inline int read(){
#define num ch-'0'
char ch;bool flag=;int res;
while(!isdigit(ch=getc()))
(ch=='-')&&(flag=true);
for(res=num;isdigit(ch=getc());res=res*+num);
(flag)&&(res=-res);
#undef num
return res;
}
const int N=;
ll sum[N];int f[][],g[N];
ll ans=,t;int n,l,r,len=;
void solve1(){
int x,i,j;
for(x=len;x;--x){
for(i=;i<=n;++i) g[i]=inf;
for(i=;i<=n;++i)
for(j=;j<i;++j)
if(g[j]<r){
t=sum[i]-sum[j];
if((t>>(ll)x|ans)==ans&&(t&1ll<<(ll)x-1ll)==) cmin(g[i],g[j]+);
}
ans<<=1ll;
if(g[n]>r) ++ans;
}
}
void solve2(){
int x,i,j,k;
for(x=len;x;--x){
memset(f,,sizeof(f));
f[][]=;
for(i=;i<=n;++i)
for(j=;j<=i;++j)
for(k=;k<i;++k)
if(f[k][j-]){
t=sum[i]-sum[k];
if((t>>(ll)x|ans)==ans&&(t&1ll<<(ll)x-1ll)==) f[i][j]=;
}
for(i=l;i<=r;++i)
if(f[n][i]) break;
ans<<=1ll;
if(i>r) ++ans;
}
}
int main(){
// freopen("testdata.in","r",stdin);
n=read(),l=read(),r=read();
for(int i=;i<=n;++i)
sum[i]=sum[i-]+read();
for(t=sum[n];t;t>>=) ++len;
l==?solve1():solve2();
printf("%lld\n",ans);
return ;
}

洛谷P3646 [APIO2015]巴厘岛的雕塑(数位dp)的更多相关文章

  1. APIO2015巴厘岛的雕塑——数位DP

    题目:https://www.luogu.org/problemnew/show/P3646 对于A>1,将答案各位全置1,然后从高位到低位改成0判断是否可行: 用f[i][j]数组代表前i个数 ...

  2. 洛谷CF809C Find a car(数位DP)

    洛谷题目传送门 通过瞪眼法发现,\(a_{i,j}=(i-1)\text{ xor }(j-1)+1\). 二维差分一下,我们只要能求\(\sum\limits_{i=0}^x\sum\limits_ ...

  3. 洛谷P2606 [ZJOI2010]排列计数(数位dp)

    题目描述 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Magic的,答案可能很 ...

  4. 洛谷$P3413$ 萌数 $SAC\#1$ 数位$dp$

    正解:数位$dp$ 解题报告: 传送门! 非常套路的数位$dp$,,,?打起来就很爽昂,,,不要脑子,我就很爱嘻嘻嘻 然后$[l,r]$这种问题不显然考虑套路地搞成$[1,l-1]$和$[1,r]$嘛 ...

  5. 洛谷$P$2235 $Kathy$函数 $[HNOI2002]$ 数位$dp$

    正解:数位$dp$ 解题报告: 传送门$qwq$ $HNOI$的题从02年就这么神了嘛$QAQ$,,, 嗷对了这题如果看出了一个结论就是个数位$dp$板子,,,?但是结论很神我$jio$得挺难看出来的 ...

  6. 洛谷P2602 [ZJOI2010]数字计数 题解 数位DP

    题目链接:https://www.luogu.com.cn/problem/P2602 题目大意: 计算区间 \([L,R]\) 范围内 \(0 \sim 9\) 各出现了多少次? 解题思路: 使用 ...

  7. 洛谷P2657 [SCOI2009]windy数 题解 数位DP

    题目链接:https://www.luogu.com.cn/problem/P2657 题目大意:找区间 \([A,B]\) 范围内 不含前导零 且 相邻两个数字之差至少为2 的正整数的个数. 题目分 ...

  8. Luogu P3646 [APIO2015]巴厘岛的雕塑

    深夜写题解系列,话说这题暑假的时候就在LOJ上做掉了,然后今天看到Luogu上有就去交了一下,发现没写过题解,赶紧来补一下 说句题外话APIO2015的题目好水啊 首先考虑按位取或的过程,很显然要从二 ...

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

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

随机推荐

  1. JS性能优化——加载和执行

    JavaScript 在浏览器中的性能,可以认为是开发者所面临得最严重的可用性问题.这个问题因JavaScript的阻塞特性变得复杂, 也就是说当浏览器在执行JavaScript代码时,不能同时做其他 ...

  2. Java for LeetCode 118 Pascal's Triangle

    Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5, Retu ...

  3. bind、call、apply的区别与实现原理

    1.简单说一下bind.call.apply的区别 三者都是用于改变函数体内this的指向,但是bind与apply和call的最大的区别是:bind不会立即调用,而是返回一个新函数,称为绑定函数,其 ...

  4. Macaca,app-inspector安装

    1.安装brew 软件包管理工具:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/inst ...

  5. FZU2013 A short problem —— 线段树/树状数组 + 前缀和

    题目链接:https://vjudge.net/problem/FZU-2013  Problem 2013 A short problem Accept: 356    Submit: 1083Ti ...

  6. codeforces 609D D. Gadgets for dollars and pounds(二分+贪心)

    题目链接: D. Gadgets for dollars and pounds time limit per test 2 seconds memory limit per test 256 mega ...

  7. Happy Great BG-卡精度

    Happy Great BG Time Limit: 2000ms Case Time Limit: 2000ms Memory Limit: 65536KB   64-bit integer IO ...

  8. UML统一建模语UML2和EnterpriseArchitect

    其实前面的UML统一建模语言(一)所描述的都是UML1的内容,现在咱们聊一聊UML2. UML2.x完全建立在UML1.x基础之上,大多数的UML1.x模型在UML2.x中都可用.但UML2.x在结构 ...

  9. hadoop之一:概念和整体架构

    什么是hadoop? Apache Hadoop是一款支持数据密集型分布式应用并以Apache 2.0许可协议发布的开源软件框架.它支持在商品硬件构建的大型集群上运行的应用程序.Hadoop是根据Go ...

  10. Entity Framework之领域驱动设计实践

    http://www.cnblogs.com/daxnet/archive/2010/11/02/1867392.html