初赛成绩出了,和预想的一样,一分都没挂,开心。

大佬的博客

subtask 1 ($n \leq 200$)

因为高位取$0$一定比高位取$1$优,我们考虑按照位从高到低进行检验,设$f_{i, j}$表示前$i$个数划分成$j$段是不是可行,在转移的时候要注意不能让之前计算过的高位从$0$变成$1$,最后只要找到一个$i$满足$A\leq i \leq B$并且$f_{n, i} == true$就可以使当前位取$0$了。

时间复杂度$O(n^3log(MaxInt))$。

subtask 2 ($n \leq 2000,\ A == 1$)

仍然从高位到低位倒叙循环考虑检验,因为这次划分的段数没有下界的限制,我们只要设$g_i$表示到$i$满足这一位取$0$所要划分的最大段数,转移的条件和$f$差不多,最后只要看一看是不是满足$g_n \leq B$就可以知道能不能取$0$了。

时间复杂度$O(n^2log(MaxInt))$。

代码里借鉴了上面大佬的一些写法。

Code:

  1. #include <cstdio>
  2. #include <cstring>
  3. using namespace std;
  4. typedef long long ll;
  5.  
  6. const int N = ;
  7. const int M = ;
  8. const ll inf = << ;
  9.  
  10. int n, len = , st, ed, g[M];
  11. ll ans = , a[M], sum[M];
  12. bool f[N][N];
  13.  
  14. template <typename T>
  15. inline void read(T &X) {
  16. X = ; char ch = ; T op = ;
  17. for(; ch > ''|| ch < ''; ch = getchar())
  18. if(ch == '-') op = -;
  19. for(; ch >= '' && ch <= ''; ch = getchar())
  20. X = (X << ) + (X << ) + ch - ;
  21. X *= op;
  22. }
  23.  
  24. template <typename T>
  25. inline void chkMin(T &x, T y) {
  26. if(y < x) x = y;
  27. }
  28.  
  29. inline void solve1() {
  30. for(; len; --len) {
  31. for(int i = ; i <= n; i++)
  32. for(int j = ; j <= i; j++)
  33. f[i][j] = ;
  34. f[][] = ;
  35.  
  36. for(int i = ; i <= n; i++) {
  37. for(int j = ; j <= i; j++)
  38. for(int k = ; k < i; k++)
  39. if(f[k][j - ]) {
  40. ll now = sum[i] - sum[k];
  41. if((now & (1LL << (len - ))) == && (ans | (now >> len)) == ans)
  42. f[i][j] = ;
  43. }
  44. }
  45.  
  46. bool flag = ;
  47. for(int i = st; i <= ed; i++)
  48. flag |= f[n][i];
  49.  
  50. ans <<= ;
  51. if(!flag) ans |= ;
  52. }
  53. }
  54.  
  55. inline void solve2() {
  56. for(; len; --len) {
  57. for(int i = ; i <= n; i++) g[i] = inf;
  58. g[] = ;
  59.  
  60. for(int i = ; i <= n; i++)
  61. for(int j = ; j < i; j++) {
  62. ll now = sum[i] - sum[j];
  63. if((now & (1LL << (len - ))) == && (ans | (now >> len)) == ans)
  64. chkMin(g[i], g[j] + );
  65. }
  66.  
  67. ans <<= ;
  68. if(g[n] > ed) ans |= ;
  69. }
  70. }
  71.  
  72. int main() {
  73. read(n), read(st), read(ed);
  74. for(int i = ; i <= n; i++) {
  75. read(a[i]);
  76. sum[i] = sum[i - ] + a[i];
  77. }
  78.  
  79. len = ;
  80. for(ll tmp = sum[n]; tmp > ; tmp >>= ) ++len;
  81.  
  82. if(st != ) solve1();
  83. else solve2();
  84.  
  85. printf("%lld\n", ans);
  86. return ;
  87. }

Luogu 3646 [APIO2015]巴厘岛的雕塑的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

  7. [APIO2015]巴厘岛的雕塑

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

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

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

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

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

随机推荐

  1. Java集合总结之Collection整体框架

    前段时间一直在忙一个物联网的项目,所以Java的学习一直搁置,从今天开始继续学习!望大家多提宝贵意见! java.util包中包含了一些在Java 2中新增加的最令人兴奋的增强功能:类集.一个类集(c ...

  2. Spring Aware接口---BeanNameAware BeanFactoryAware ApplicationContextAware

    前言 对于应用程序来说,应该尽量减少对spring api的耦合程度,然后有时候为了运用spring提供的一些功能,有必要让bean了解spring容器对其管理的细节信息,如让bean知道在容器中是以 ...

  3. javascript:;与javascript:void(0)

    如果想做一个链接点击后不做任何事情,或者响应点击而完成其他事情,可以设置其属性 href = "#",但是,这样会有一个问题,就是当页面有滚动条时,点击后会返回到页面顶端,用户体验 ...

  4. 一个kafka异常

    卡夫卡经常超时,而且超时时间固定为三分钟,因为时间长度固定,所以逆推一下,发现现有的配置里面有个session的timeout是三分钟,但是其实后来验证发现真是的原因是connect timeout, ...

  5. (转)Android和JavaScript互相调用

    Html页面和Java代码结合的方式一般用在界面经常被更改 的情况下,可以讲html放在网络中,软件一打开就会访问网络获取到最新的界面.缺点是会受到网络信号的影响,从而导致访问速度慢. 1.用WebV ...

  6. git 统计命令

    git log --author='user' --pretty=tformat: --numstat --since='2018-01-01' --before='2018-10-10' | gaw ...

  7. mysql实战优化之三:表优化

    对于大多数的数据库引擎来说,硬盘操作可能是最重大的瓶颈.所以,把你的数据变得紧凑会对这种情况非常有帮助,因为这减少了对硬盘的访问. 如果一个表只会有几列罢了(比如说字典表,配置表),那么,我们就没有理 ...

  8. Java-Runoob:Java 基本数据类型

    ylbtech-Java-Runoob:Java 基本数据类型 1.返回顶部 1. Java 基本数据类型 变量就是申请内存来存储值.也就是说,当创建变量的时候,需要在内存中申请空间. 内存管理系统根 ...

  9. CommonJS、CMD和AMD规范分别是什么

    CommonJS.CMD和AMD规范分别是什么 Commonjs是用在服务器端的,同步的,如nodejs amd, cmd是用在浏览器端的,异步的,如requirejs和seajs 其中,amd先提出 ...

  10. 012. MVC5中Razor引擎使用模板页

    1.文件→新建项目→框架选择.NET Framework 4.5 2.确定后选择ASP.NET 4.5 模板→MVC→为以下项添加文件夹和核心引用→MVC, 在vs 2015中默认就使用的Razor引 ...