巴厘岛的雕塑(sculptures)

印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道。

在这条主干道上一共有 N 座雕塑,为方便起见,我们把这些雕塑从 1 到 N 连续地进行标号,其中第 i 座雕塑的年龄是 Yi 年。为了使这条路的环境更加优美,政府想把这些雕塑分成若干组,并通过在组与组之间种上一些树,来吸引更多的游客来巴厘岛。

下面是将雕塑分组的规则:

(1) 这些雕塑必须被分为恰好 X 组,其中 A≤X≤B,每组必须含有至少一个雕塑,每个雕塑也必须属于且只属于一个组。同一组中的所有雕塑必须位于这条路的连续一段上。

(2)当雕塑被分好组后,对于每个组,我们首先计算出该组所有雕塑的年龄和。

(3)计算所有年龄和按位取或的结果。我们这个值把称为这一分组的最终优美度。

请问政府能得到的最小的最终优美度是多少?

备注:将两个非负数 P 和 Q 按位取或是这样进行计算的:

(1) 首先把 P 和 Q 转换成二进制:设 nP是P的二进制位数,nQ是Q的二进制位数,M为 nP和nQ中的最大值。P的二进制表示为 pM-1 p M-2 ... p1 p0,Q 的二进制表示为 qM-1 qM-2 ... q1 q0,其中 pi 和 qi分别是 P 和 Q 二进制表示下的第 i 位,第 M−1 位是数的最高位,第 0 位是数的最低位。

(2) P 与 Q 按位取或后的结果是:

(pM-1 OR qM-1 )( p M-2 OR qM-2)...(p1 OR q1)( p0 OR q0)。其中:

0 OR 0 = 0 0 OR 1 = 1

1 OR 0 = 1 1 OR 1 = 1

|Subtask #|分值|$N$|$A,B$|$Y_i$|
|-|-|-|-|-|
|1|9|$N\le 20$|$1\le A\le B\le N$|$Y_i\le 10^9$|
|2|16|$N\le 50$|$1\le A\le B\le \min(20,N)$|$Y_i\le 10$|
|3|21|$N\le 100$|$A=1, 1\le B\le N$|$Y_i\le 20$|
|4|25|$N\le 100$|$1\le A\le B\le N$|$Y_i\le 10^9$|
|5|29|$N\le 2000$|$A=1, 1\le B\le N$|$Y_i\le 10^9$|


Solution

这数据范围是2合1啊

考虑 $N\le 100$ $1\le A\le B\le N$

设计dp f[i][j]表示前i个雕塑,分成j组的最大或。

然而这么dp会有后效性--前面最优不保证整体最优。

考虑在外面按位确定答案,转化为可行性问题,然后就可以dp了

效率O(n^3*60)

考虑 $N\le 2000$ $A=1, 1\le B\le N$

同样是按位确定答案,只是这时可简化状态为f[i]表示划分完前i个的最小段数。

效率O(n^2*60)

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
int n,f[][],A,B,g[];
ll a[],la;
int main(){ cin>>n>>A>>B;
for(int i=;i<=n;i++)scanf("%lld",&a[i]),a[i]+=a[i-];
if(n<=){
for(ll ws=;ws>=;ws--){
la=la+(1LL<<ws);
memset(f,,sizeof f);
for(int i=;i<=;i++)f[][i]=;
for(int i=;i<=n;i++){
for(int j=;j<=i;j++){
for(int k=j-;k<i;k++){
f[i][j]|=(f[k][j-]&(((a[i]-a[k])&la)==));
if(ws==){
//printf("ws=%d k=%d f[%d] [%d] =%d\n",ws,k,i,j,f[i][j]);
//printf("%d %d\n",(a[i]-a[k]),la,(a[i]-a[k])&la);
}
}
}
}
int fl=;
for(int i=A;i<=B;i++)if(f[n][i]){fl=;break;}
if(!fl)la-=(1LL<<ws);
} }
else {
for(ll ws=;ws>=;ws--){
la=la+(1LL<<ws);
memset(f,,sizeof f);
for(int i=;i<=n;i++)g[i]=1e9;
for(int i=;i<=n;i++){
for(int j=;j<=i;j++){
if(((a[i]-a[j])&la)==)g[i]=min(g[i],g[j]+);
}
}
if(g[n]>B)la-=(1LL<<ws);
}
}
ll Max=(1LL<<)-;
cout<<Max-la<<endl;
return ;
}

巴厘岛的雕塑(sculptures)的更多相关文章

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

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

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

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

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

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

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

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

  5. bzoj4069【APIO2015】巴厘岛的雕塑

    4069: [Apio2015]巴厘岛的雕塑 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 192  Solved: 89 [Submit][Stat ...

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

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

  7. 巴厘岛的雕塑 BZOJ 4069

    巴厘岛的雕塑 题解: 题意是要求分组使每组的和按位取或的值最小 那么考虑贪心,尽量使高位为0 于是枚举位置,从最高位枚举 假设当前枚举到第l位. 令 f[i][j] 表示前 i 个数分成 j 组,满足 ...

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

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

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

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

随机推荐

  1. 【靶场练习_sqli-labs】SQLi-LABS Page-2 (Adv Injections)

    Less-21:括号+单引号绕过+base64cookie编码 总感觉我已经把sql注入做成代码审计了:P <?php //including the Mysql connect paramet ...

  2. JavaScript实现Word、Excel、PPT在线预览

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_27626333/article/d ...

  3. Apache + Tomcat 集群的配置

    公司最近新接了一个项目,客户要求WEB SERVER 必须是APACHE,,由于之前的项目一直都是NGINX,,无奈啊,,由于对方的IT又是在三哥的过度,经过一番的争执只能顺应三哥三姐的要求..

  4. 用 Flask 来写个轻博客 (33) — 使用 Flask-RESTful 来构建 RESTful API 之二

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 构建 RESTful Flask API 定义资源路由 格式 ...

  5. delphi vlc 安装bug 处理编译错误"0" is an invalid value for the "DebugInformation" parameter of the "DCC"

    处理编译错误"0" is an invalid value for the "DebugInformation" parameter of the "DCC" [摘要:http://blog.csdn ...

  6. centos 7 安装 redis 及 php-redis 拓展

    ===============redis 安装========================== 直接yum 安装的redis 不是最新版本 yum install redis 如果要安装最新的re ...

  7. 启动项目时出现Error: Node Sass does not yet support your current environment: Windows 64-bit with Unsupported runtime (72)

    前几天趁假期重新装了一次系统,重新安装各种配置之后再启动项目的时候就报这个错误 第一反应就是去搜这个错误怎么解决,搜来搜去基本上都是让我重新安装node-sass,但我重装node-sass的时候又出 ...

  8. centos 7.2 离线安装 gcc

    1.查看有没有挂载 centos 7.2 的镜像源文件 2.如果没有就通过服务端挂载 如果不知怎么挂载,就解压CentOS-7-x86_64-DVD-1511.iso 镜像文件,在Packages找到 ...

  9. PHP pthread多线程

    class test extends Thread { public $arg; public function __construct($arg){ $this->arg = $arg; } ...

  10. go中加号的用法

    // + 的用法 package main import "fmt" func main() { // 加号两端都是数字的话,做加法运算 var i = 1 var j = 1 v ...