题意

给你长度为 \(n\) 的序列,要求分成 \(k\) 段连续非空的区间,求所有区间和的 \(or\) 最小值。

分析

  • 定义 \(f_{i,j}\) 表示前 \(i\) 个点分成 \(j\) 段的最小 \(or\) 是有问题的,因为可能有一位一定在后面出现而某一位没有必要在后面出现,这时贪心就出现了问题。

  • 考虑按位贪心,假设考虑到了第 \(b\) 位,定义 \(f_{i,j}\) 表示前 \(i\) 个点分成 \(j\) 段且满足 \(b\) 以上位的限制,第 \(b\) 位为 \(0\) 是否存在方案。如果这一位没有方法满足为 \(0\) 就设置成 \(1\).

  • 复杂度 \(O(60*n^3)\)

  • 对于最后一个 \(subtask\) 稍微改一下定义即可,复杂度 \(O(60*n^2)\)。

代码

#include<bits/stdc++.h>
using namespace std;
#define go(u) for(int i=head[u],v=e[i].to;i;i=e[i].lst,v=e[i].to)
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define pb push_back
typedef long long LL;
inline int gi(){int x=0,f=1;char ch=getchar();while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}while(isdigit(ch)){x=(x<<3)+(x<<1)+ch-48;ch=getchar();}return x*f;
}
template<typename T>inline bool Max(T &a,T b){return a<b?a=b,1:0;}
template<typename T>inline bool Min(T &a,T b){return b<a?a=b,1:0;}
const int N=2004,inf=0x3f3f3f3f;
LL s[N];
int A,B,n;
namespace task1{int f[N];LL res=0;void solve(){for(int b=60;~b;--b){fill(f+1,f+1+n,inf);f[0]=0;rep(i,1,n)rep(k,0,i-1)if(f[k]!=inf&&( res>>b+1 | (s[i]-s[k]>>b+1)) ==res>>b+1  && !((s[i]-s[k]>>b)&1))Min(f[i],f[k]+1);if(f[n]!=inf&&f[n]<=B) continue;else res|=1ll<<b;}printf("%lld\n",res);}
}
namespace task2{bool f[N][N];LL res=0;void solve(){for(int b=60;~b;--b){memset(f,0,sizeof f); f[0][0]=1;rep(i,1,n)rep(j,1,i)rep(k,0,i-1){f[i][j]|=(f[k][j-1]&& ( res>>b+1 | (s[i]-s[k]>>b+1)) ==res>>b+1  && !((s[i]-s[k]>>b)&1));}bool fg=0;for(int i=A;i<=B;++i) fg|=f[n][i];if(!fg) res|=1ll<<b;}printf("%lld\n",res);}
}
int main(){n=gi(),A=gi(),B=gi();rep(i,1,n) s[i]=s[i-1]+gi();if(A==1) task1::solve();else task2::solve();return 0;
}

转载于:https://www.cnblogs.com/yqgAKIOI/p/9900181.html

[APIO2015]巴厘岛的雕塑[按位贪心+dp]相关推荐

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

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

  2. Bzoj4069:[Apio2015]巴厘岛的雕塑:dp+贪心

    题目链接:[Apio2015]巴厘岛的雕塑 一开始先写了个既错误又高复杂度的dp,令dp[i][j]=min(dp[i][k],dp[j][k-1]|(s[i]-s[j])),其中s[]代表前缀和 首 ...

  3. 4069: [Apio2015]巴厘岛的雕塑 DP+按位贪心

    去年的我对位运算一无所知..所以在考场上直接没敢看题..之后据说搜索有分,错的DP有分.我的内心是崩溃的..然而就算看了题还是什么都不会写. 考虑按位贪心,从高位到低位枚举,用 fi,j f_{i,j ...

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

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

  5. [APIO2015]巴厘岛的雕塑(数位dp)

    [题解] 引用ZYF神犇一句话:"显然位运算的极值问题都应该从高位向低位考虑.优先让这一位为0,如果行的话这一位就是0,否则就设为1." 设答案为ans,从高位到低位枚举 是否有使 ...

  6. P3646 [APIO2015]巴厘岛的雕塑

    非常好的二进制dp题 参考了这位大佬的思路:https://www.cnblogs.com/zbtrs/p/8495170.html #include<iostream> #include ...

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

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

  8. URAL 1203 Scientific Conference(贪心 || DP)

    Scientific Conference 之前一直在刷计算几何,邀请赛连计算几何的毛都买见着,暑假这一段时间就做多校,补多校的题目,刷一下一直薄弱的DP.多校如果有计算几何一定要干掉-.- 题意:给 ...

  9. Codeforces Round #699 (Div. 2) E.Sorting Books(贪心+DP / 线段树)超高质量题解,看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 E - Sorting Books 一排书架上有 nnn 本书排成一排,每本书上有一个颜色 aia_i ...

最新文章

  1. linux dns chroot配置文件,linxu chroot DNS 配置
  2. Linux下获取详细硬件信息的工具:Dmidecode命令详解
  3. python【蓝桥杯vip练习题库】ALGO-148 5-1最小公倍数(GCD)
  4. celeba数据集_人脸识别常用数据集介绍(附下载链接)及常用评估指标
  5. 【机器学习】FaceBook开源全网第一个时序王器--Kats。
  6. [周赛][Leetcode][第5457题][JAVA][动态规划][和为奇数的子数组数目]
  7. java gb13000 ucs2_采用GB 13000的UCS-2进行存储的文件怎么转换
  8. linux下新建一个脚本文件,linux下新建并启动脚本文件
  9. 土方工程量计算表格excel_工程造价算量表+工程量软件,超多表格可套用,高清下载...
  10. mysql省市区县街道
  11. 公众号点击图片变成另一张_朋友圈也能发九宫格图片,再也不犯选择困难症
  12. matlab倒谱法基音周期,语音学习笔记1------matlab实现自相关函数法基音周期提取...
  13. 2020年小米校招JAVA岗笔试第二题
  14. SecureCRT教程——如何使用SecureCRT命令窗口将命令发送到多个会话
  15. 网络计算机win7为啥连不上,浅析win7旗舰版64位系统网络连接不上的解决方法
  16. 生活琐事--纯属无聊
  17. 16进制几个字符是一个字节
  18. SOLIDWORKS会遇到的预览问题
  19. react 改变css样式_react怎么更改css样式
  20. (转)MTK-开发平台搭建与入门教程

热门文章

  1. cmd命令安装composer踩坑
  2. idea设置默认maven路径(2020版idea)
  3. excel通过js导入到页面_基于Excel和Java自动化工作流程:发票生成器示例
  4. python 修饰器_python中用修饰器进行异常日志记录
  5. 微信小程序rpx作为高度单位时,在 ios 出现异常
  6. Maven exec:java 运行 Java main 方法
  7. windows cmd下的转义符
  8. java更新无法正常安装_Java无法安装
  9. mysql group by join_mysql – GROUP BY之后的LEFT JOIN?
  10. mysql 5.1.17 redis_redis作为mysql的缓存服务器(读写分离)