传送门

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

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

考虑从高位到低位贪心,如果能使答案第$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. 应用索引技术优化SQL 语句(转)

    原文出处 一.前言 很多数据库系统性能不理想是因为系统没有经过整体优化,存在大量性能低下的SQL 语句.这类SQL语句性能不好的首要原因是缺乏高效的索引.没有索引除了导致语句本身运行速度慢外,更是导致 ...

  2. session,cookie的理解(总结)

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  3. gradle 添加依赖

    files 添加libs下的 project 添加一个module compile 去下载一个

  4. HTML5/CSS3淡入淡出滑块焦点图

    在线演示 本地下载

  5. 《avascript 高级程序设计(第三版)》 ---第二章 在HTML中使用Javascript

    本章主要讲解了,怎么在HTML中使用: 1.<script src=""></script> 属性:defer="defer" 表示脚本 ...

  6. Contiki Rtimer 模块

    一.rtimer概述 The Contiki rtimer library provides scheduling and execution of real-time tasks (with pre ...

  7. matlab中的try...catch...end

    我们知道,matlab的代码是按行执行的,如果碰到错误行,则程序中断.try..catch可以使得可能出错代码不影响后面代码的继续执行,也可以检查,排查,解决程序的一些错误,增强代码的鲁棒性和可靠性. ...

  8. HihoCoder1644 : 完美命名的烦恼([Offer收割]编程练习赛37)(有向图的一笔画问题||欧拉路)

    描述 程序员常常需要给变量命名.给函数命名.给项目命名.给团队命名…… 好的名字可以大大提高程序员的主观能动性,所以很多程序员在起名时都会陷入纠结和烦恼. 小Hi希望给新的项目起个完美的名字.首先小H ...

  9. UVA1389 Hard Life[二分答案+最小割]

    我真菜啊←地址 求最大密度子图方案.密度=边数/点数 假设E,V为最大密度子图的边数点数.则$\forall \rho$有$\rho \leqslant \frac{E}{V}$即$E- \rho V ...

  10. 基于zookeeper的MySQL主主负载均衡的简单实现

    1.先上原理图 2.说明 两个mysql采用主主同步的方式进行部署. 在安装mysql的服务器上安装客户端(目前是这么做,以后想在zookeeper扩展集成),客户端实时监控mysql应用的可用性,可 ...