巴厘岛的雕塑(sculptures)
巴厘岛的雕塑(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)的更多相关文章
- bzoj千题计划239:bzoj4069: [Apio2015]巴厘岛的雕塑
http://www.lydsy.com/JudgeOnline/problem.php?id=4069 a!=1: 从高位到低位一位一位的算 记录下哪些位必须为0 dp[i][j] 表示前i个数分为 ...
- [APIO2015]巴厘岛的雕塑 --- 贪心 + 枚举
[APIO2015]巴厘岛的雕塑 题目描述 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有\(N\)座雕塑,为方便起见,我们把这些雕塑从 1 到\(N\)连续地进行 ...
- bzoj 4069 [Apio2015]巴厘岛的雕塑 dp
[Apio2015]巴厘岛的雕塑 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 494 Solved: 238[Submit][Status][Dis ...
- 【BZOJ4069】【APIO2015】巴厘岛的雕塑 [贪心][DP]
巴厘岛的雕塑 Time Limit: 10 Sec Memory Limit: 64 MB[Submit][Status][Discuss] Description 印尼巴厘岛的公路上有许多的雕塑, ...
- bzoj4069【APIO2015】巴厘岛的雕塑
4069: [Apio2015]巴厘岛的雕塑 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 192 Solved: 89 [Submit][Stat ...
- 【BZOJ4069】[Apio2015]巴厘岛的雕塑 按位贪心+DP
[BZOJ4069][Apio2015]巴厘岛的雕塑 Description 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有 N 座雕塑,为方便起见,我们把这些雕塑从 ...
- 巴厘岛的雕塑 BZOJ 4069
巴厘岛的雕塑 题解: 题意是要求分组使每组的和按位取或的值最小 那么考虑贪心,尽量使高位为0 于是枚举位置,从最高位枚举 假设当前枚举到第l位. 令 f[i][j] 表示前 i 个数分成 j 组,满足 ...
- 【LOJ】#2886. 「APIO2015」巴厘岛的雕塑 Bali Sculptures
题解 感觉自己通过刷水题混LOJ刷题量非常成功 首先是二进制枚举位,判是否合法 要写两个solve不是很开心,\(A\)不为1的直接记录状态\(f[i][j]\)为能否到达前\(i\)个分成\(j\) ...
- 4069: [Apio2015]巴厘岛的雕塑
Description 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有 N 座雕塑,为方便起见,我们把这些雕塑从 1 到 N 连续地进行标号,其中第 i 座雕塑的年龄 ...
随机推荐
- 【靶场练习_sqli-labs】SQLi-LABS Page-2 (Adv Injections)
Less-21:括号+单引号绕过+base64cookie编码 总感觉我已经把sql注入做成代码审计了:P <?php //including the Mysql connect paramet ...
- JavaScript实现Word、Excel、PPT在线预览
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_27626333/article/d ...
- Apache + Tomcat 集群的配置
公司最近新接了一个项目,客户要求WEB SERVER 必须是APACHE,,由于之前的项目一直都是NGINX,,无奈啊,,由于对方的IT又是在三哥的过度,经过一番的争执只能顺应三哥三姐的要求..
- 用 Flask 来写个轻博客 (33) — 使用 Flask-RESTful 来构建 RESTful API 之二
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 构建 RESTful Flask API 定义资源路由 格式 ...
- 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 ...
- centos 7 安装 redis 及 php-redis 拓展
===============redis 安装========================== 直接yum 安装的redis 不是最新版本 yum install redis 如果要安装最新的re ...
- 启动项目时出现Error: Node Sass does not yet support your current environment: Windows 64-bit with Unsupported runtime (72)
前几天趁假期重新装了一次系统,重新安装各种配置之后再启动项目的时候就报这个错误 第一反应就是去搜这个错误怎么解决,搜来搜去基本上都是让我重新安装node-sass,但我重装node-sass的时候又出 ...
- centos 7.2 离线安装 gcc
1.查看有没有挂载 centos 7.2 的镜像源文件 2.如果没有就通过服务端挂载 如果不知怎么挂载,就解压CentOS-7-x86_64-DVD-1511.iso 镜像文件,在Packages找到 ...
- PHP pthread多线程
class test extends Thread { public $arg; public function __construct($arg){ $this->arg = $arg; } ...
- go中加号的用法
// + 的用法 package main import "fmt" func main() { // 加号两端都是数字的话,做加法运算 var i = 1 var j = 1 v ...