居然要对不同的数据写不同的dp= =

首先记得开long long,<<的时候要写成1ll<<bt

根据or的性质,总体思路是从大到小枚举答案的每一位,看是否能为0.

首先对于A=1的情况,因为没有最小值限制,所以设f[i]为到i为止,当前位能为0的最小长度。判断f[n]是否小于等于B即可。注意保证当前位为0的前提下也要保证之前枚举的位不变。时间复杂度是\( O(nlog_2nlog_2ans) \)

对于其他情况(n<=100),设f[i][j]表示枚举到i为止已经分了j段是否能让当前位为0.最后判断是否有f[n][a]~f[n][b]中为ture即可。时间复杂度是\( O(n^2log_2nlog_2ans) \).

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=2005,inf=1e9;
int n,a,b;
long long s[N],bt,ans;
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
bool ok(long long x)
{
x>>=bt,x<<=bt;
return (x|ans)==ans;
}
int main()
{
n=read(),a=read(),b=read();
for(int i=1;i<=n;i++)
s[i]=s[i-1]+read();
for(long long x=s[n];x;x>>=1,bt++);
if(a==1)
{
int f[N];
for(;bt>=0;bt--)
{
f[0]=0;
for(int i=1;i<=n;i++)
{
f[i]=inf;
for(int j=0;j<i;j++)
if(f[i]>f[j]+1&&ok(s[i]-s[j]))
f[i]=f[j]+1;
}
if(f[n]>b)
ans|=(1ll<<bt);
}
}
else
{
bool f[105][105];
for(;bt>=0;bt--)
{
memset(f,0,sizeof(f));
f[0][0]=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=i&&j<=b;j++)
for(int k=0;k<i&&!f[i][j];k++)
if(f[k][j-1]&&ok(s[i]-s[k]))
f[i][j]=1;
bool ok=0;
for(int i=a;i<=b;i++)
if(f[n][i])
{
ok=1;
break;
}
if(!ok)
ans|=(1ll<<bt);
}
}
printf("%lld\n",ans);
return 0;
}

bzoj 4069: [Apio2015]巴厘岛的雕塑【dp】的更多相关文章

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

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

  2. BZOJ 4069 [Apio2015]巴厘岛的雕塑 ——贪心

    自己首先想了一种方法$f(i)$表示前$i$个最小值为多少. 然而发现位运算并不满足局部最优性. 然后我们可以从高到低贪心的判断,使得每一组的和在一个特定的范围之内. 还要特判最后一个Subtask, ...

  3. 4069: [Apio2015]巴厘岛的雕塑

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

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

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

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

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

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

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

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

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

  8. [APIO2015]巴厘岛的雕塑[按位贪心+dp]

    题意 给你长度为 \(n\) 的序列,要求分成 \(k\) 段连续非空的区间,求所有区间和的 \(or\) 最小值. 分析 定义 \(f_{i,j}\) 表示前 \(i\) 个点分成 \(j\) 段的 ...

  9. 洛谷P3646 [APIO2015]巴厘岛的雕塑(数位dp)

    传送门 话说莫非所有位运算都可以用贪心解决么……太珂怕啦…… 一直把或运算看成异或算我傻逼…… 考虑从高位到低位贪心,如果能使答案第$i$位为0那么肯定比不为$0$更优 然后考虑第$i$位是否能为$0 ...

随机推荐

  1. HDU 3938

    并查集的离线算法. 题意是大坑.理解为寻找两点之间所有路径中的最长的边的值小于输入的值的点对的个数. 直接来代码. #include<stdio.h> #include<iostre ...

  2. Oracle Spatial中的空间索引

    转自cryolite原文 Oracle Spatial中的空间索引 Oracle Spatial可对空间数据进行R-tree索引,每个空间图层(Spatial Layer)的空间索引元信息都可以在US ...

  3. CEF3研究(一)

    一.基本概览 C++ WrapperC++Wrapper(包装类)就是将C结构包装C++类. 这是C/C++API转换层通过translator tool自动产生的. 进程     CEF3用多进程运 ...

  4. Java SpringMVC实现PC端网页微信扫码支付完整版

    一:前期微信支付扫盲知识 前提条件是已经有申请了微信支付功能的公众号,然后我们需要得到公众号APPID和微信商户号,这个分别在微信公众号和微信支付商家平台上面可以发现.其实在你申请成功支付功能之后,微 ...

  5. 【转】从头说catalan数及笔试面试里那些相关的问题

    http://blog.csdn.net/han_xiaoyang/article/details/11938973#t6

  6. libevent编程疑难解答

    http://blog.csdn.net/luotuo44/article/details/39547391 转载请注明出处:http://blog.csdn.net/luotuo44/article ...

  7. 使用VLC搭建视频直播服务器

    去年我们信息之夜我们进行过视频直播服务,当时我们使用了WMS(Windows Media Server)实现了这个服务,但是编码是微软的WMV,因而像iPhone/Android这样的智能手机无法观看 ...

  8. vim、gvim在windows下中文乱码的终极解决方式

    測试成功,完美解决. 仅仅需改动VIM文件夹以下的这个文件_vimrc. 加油吧,骚年.非常强大的! set encoding=utf-8 set fileencodings=utf-8,chines ...

  9. 排队理论之性能分析 - Little Law &amp; Utilization Law

    了解一个系统的性能一般是參考一些度量值(Metric),而怎样计算出这些Metric就是我们要讨论的.Little Law(排队理论:利特儿法则)和Utilization Law是Performanc ...

  10. lmhostid获取hostid为空问题

    lmhostid获取hostid为空问题 问题描写叙述 今天迁移曾经的一个装有flexlm的虚拟机,结果发如今迁移后启动时报错 ... Wrong hostid on SERVER line for ...