原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ110.html

题解

我们发现n=2000 的子任务保证A=1!

分两种情况讨论:

$n\leq 100$:

  贪心地从高位到低位逐位考虑,看当前位是否可以放 0。用 $dp[i][j]$ 表示前 $i$ 个数是否可以在各段sum的or值不超过当前上限的情况下分成 $j$ 段。

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

$A = 1$:

  贪心地从高位到低位逐位考虑,看当前位置是否可以放0。 用 $dp[i][0/1]$ 表示前 $i$ 个数,在各段sum的or值不超过当前上限的情况下,当前位的or值是 $0/1$ 的情况下最少分成几段。

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

代码

  1. #include <bits/stdc++.h>
  2. #define clr(x) memset(x,0,sizeof (x))
  3. using namespace std;
  4. typedef long long LL;
  5. LL read(){
  6. LL x=0,f=0;
  7. char ch=getchar();
  8. while (!isdigit(ch))
  9. f|=ch=='-',ch=getchar();
  10. while (isdigit(ch))
  11. x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
  12. return f?-x:x;
  13. }
  14. const int N=2005;
  15. int n,A,B;
  16. LL a[N];
  17. void ckMin(int &x,int y){
  18. x=x<y?x:y;
  19. }
  20. namespace so1{
  21. const int N=105;
  22. int dp[N][N];
  23. int check(LL v){
  24. clr(dp);
  25. dp[0][0]=1;
  26. for (int i=1;i<=n;i++)
  27. for (int j=0;j<i;j++)
  28. if ((v|(a[i]-a[j]))==v)
  29. for (int k=0;k<n;k++)
  30. dp[i][k+1]|=dp[j][k];
  31. for (int i=1;i<=n;i++)
  32. if (A<=i&&i<=B&&dp[n][i])
  33. return 1;
  34. return 0;
  35. }
  36. void main(){
  37. LL ans=0;
  38. for (int i=40;i>=0;i--)
  39. if (!check(ans|((1LL<<i)-1)))
  40. ans|=1LL<<i;
  41. cout<<ans<<endl;
  42. }
  43. }
  44. namespace so2{
  45. const int N=2005;
  46. int dp[N][2];
  47. void main(){
  48. LL ans=0;
  49. for (int d=40;d>=0;d--){
  50. for (int i=0;i<N;i++)
  51. dp[i][0]=dp[i][1]=1e9;
  52. dp[0][0]=0;
  53. LL v=ans|((1LL<<(d+1))-1);
  54. for (int i=1;i<=n;i++)
  55. for (int j=0;j<i;j++)
  56. if ((v|(a[i]-a[j]))==v)
  57. for (int t=0;t<2;t++)
  58. ckMin(dp[i][t|((a[i]-a[j])>>d&1LL)],dp[j][t]+1);
  59. if (dp[n][0]>B)
  60. ans|=1LL<<d;
  61. }
  62. cout<<ans<<endl;
  63. }
  64. }
  65. int main(){
  66. n=read(),A=read(),B=read();
  67. for (int i=1;i<=n;i++)
  68. a[i]=a[i-1]+read();
  69. if (n<=100)
  70. so1::main();
  71. else
  72. so2::main();
  73. return 0;
  74. }

  

UOJ#110. 【APIO2015】Bali Sculptures 贪心 动态规划的更多相关文章

  1. 【51Nod】1510 最小化序列 贪心+动态规划

    [题目]1510 最小化序列 [题意]给定长度为n的数组A和数字k,要求重排列数组从而最小化: \[ans=\sum_{i=1}^{n-k}|A_i-A_{i+k}|\] 输出最小的ans,\(n \ ...

  2. nyoj 16-矩形嵌套(贪心 + 动态规划DP)

    16-矩形嵌套 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:13 submit:28 题目描述: 有n个矩形,每个矩形可以用a,b来描述,表示长和 ...

  3. UOJ#110. 【APIO2015】Bali Sculptures

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

  4. 【UOJ #110】【APIO 2015】Bali Sculptures

    http://uoj.ac/problem/110 这道题subtask4和subtask5是不同的算法. 主要思想都是从高位到低位贪心确定答案. 对于subtask4,n比较小,设\(f(i,j)\ ...

  5. 【APIO2015】Bali Sculptures

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

  6. UOJ#345. 【清华集训2017】榕树之心 贪心,动态规划

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ345.html 前言 我真的是越来越菜了,连树形DP都感觉陌生了. 题解 首先,我们来看看在不断生长叶子会 ...

  7. 【LOJ】#2886. 「APIO2015」巴厘岛的雕塑 Bali Sculptures

    题解 感觉自己通过刷水题混LOJ刷题量非常成功 首先是二进制枚举位,判是否合法 要写两个solve不是很开心,\(A\)不为1的直接记录状态\(f[i][j]\)为能否到达前\(i\)个分成\(j\) ...

  8. POJ1065 Wooden Sticks(贪心+动态规划——单调递减或递增序列)

    描述 C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间,如果第i+1个木棒的重量和长度都大于等于 第i个处理的木棒,那么将不会耗费时间,否则 ...

  9. BZOJ 3227 [Sdoi2008]红黑树(tree) ——贪心 动态规划

    首先可以想到一个贪心的方法,然后一层一层的合并. 也可以采用动态规划的方式,为了写起来好写,把点数*2+1,然后发现在本机上跑不过1500的数据. 交上去居然A掉了. 贪心 #include < ...

随机推荐

  1. 【APIO2016】【UOJ205】【LOJ2568】烟花表演 可合并堆

    题目大意 有一棵树,每条边都有一个边权,现在你要修改边权,使得修改后根到所有叶子的距离相等. 要求所有边权非负. 修改的代价为\(\lvert\)每条边修改前的边权\(-\)修改后的边权\(\rver ...

  2. django auth permission

    django 提供内置view处理登陆和退出. 查看django.contrib.auth源码,主要查看三个函数authenticate,login,logout. authenticate(requ ...

  3. Ubuntu 服务器上面--安装和配置mysql 【转】

    更新源列表 打开"终端窗口",输入"sudo apt-get update"-->回车-->"输入root用户的密码"--> ...

  4. 收藏这些Safari快捷键,让你的Mac浏览网页更加方便

    文章内容及图片来源于:知乎,如果涉及版权问题,请联系作者删除 文章收录于:风云社区(提供上千款各类mac软件的下载) Safari是Mac上的原生浏览器,功能自然很强大,现在每天在Mac上使用的最多的 ...

  5. Mybatis的原理与JVM内存结构(面试题)

    Mybatis的原理 1.Mapper 接口在初始SQL SessionFactory注册的 2.Mapper 接口注册在名为MapperRegistry类的 HasMap中 key=Mapper c ...

  6. pandas常用函数之shift

    shift函数是对数据进行移动的操作,假如现在有一个DataFrame数据df,如下所示: index value1 A 0 B 1 C 2 D 3 那么如果执行以下代码: df.shift() 就会 ...

  7. RTC子系统

    目录 RTC子系统 引入 hctosys.c interface.c class.c 小结 流程一览 框架分析 rtc_init rtc_device_register s3c_rtc_probe o ...

  8. restful设计规范

    什么是restful? REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移” REST从资源的角度类 ...

  9. windows linux 文件编码转换

    查看文件编码在Linux中查看文件编码可以通过以下几种方式:1.在Vim中可以直接查看文件编码:set fileencoding即可显示文件编码格式.如果你只是想查看其它编码格式的文件或者想解决用Vi ...

  10. NOI-OJ 1.13 ID:5 素数回文数的个数

    整体思路 使用埃拉拖色尼算法提前计算出1000以内的素数表. 设计一个回文判断函数isHW(int n),难点在于数字回文的判断.一个简单的方法是将数字n使用sprintf输出在一个数组中,然后从数组 ...