巴厘岛的雕塑 BZOJ 4069
巴厘岛的雕塑



题解:
题意是要求分组使每组的和按位取或的值最小
那么考虑贪心,尽量使高位为0
于是枚举位置,从最高位枚举
假设当前枚举到第l位。
令 f[i][j] 表示前 i 个数分成 j 组,满足前l - 1位的最优答案,当前这一位能否填0
则 f[i][j] = true 当且仅当存在 k 满足 f[k][j - 1] = true 且 (sum[i] - sum[k]) | ans == ans 且 ((sum[i] - sum[k]) >> (l - 1)) & 1 == 0
然后判断f[n][i]中是否有等于true的项,更新临时答案
最后一组数据过大,所以需要特别处理
令g[i]表示前i个数满足临时答案的最少组数
则g[k]能转移到g[i]当且仅当 (((sum[i] - sum[k]) | ans) == ans 且 (((sum[i] - sum[k]) >> (l - 1)) & 1) == 0)
如上更新答案
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
using namespace std;
inline int Get()
{
int x = ;
char c = getchar();
while('' > c || c > '') c = getchar();
while('' <= c && c <= '')
{
x = (x << ) + (x << ) + c - '';
c = getchar();
}
return x;
}
const int me = ;
long long ans;
int len;
int g[me];
long long sum[me];
bool f[][];
int n, a, b, c;
int main()
{
n = Get(), a = Get(), b = Get();
for(int i = ; i <= n; ++i)
{
c = Get();
sum[i] = sum[i - ] + c;
}
len = log2(sum[n]) + ;
if(a - )
{
for(int l = len; l >= ; --l)
{
f[][] = true;
for(int i = ; i <= n; ++i)
for(int j = ; j <= i; ++j)
{
f[i][j] = false;
for(int k = ; k < i; ++k)
{
long long su = sum[i] - sum[k];
if(f[k][j - ] && ((su >> l) | ans) == ans && ((su >> (l - )) & 1ll) == )
{
f[i][j] = true;
break;
}
}
}
ans <<= ;
for(int i = a; i <= b; ++i)
if(f[n][i])
{
ans |= ;
break;
}
ans ^= ;
}
printf("%I64d", ans);
}
else
{
for(int l = len; l >= ; --l)
{
for(int i = ; i <= n; ++i)
{
g[i] = n + ;
for(int k = ; k < i; ++k)
{
long long su = sum[i] - sum[k];
if(((su >> l) | ans) == ans && ((su >> (l - )) & 1ll) == )
if(g[k] + < g[i]) g[i] = g[k] + ;
}
}
ans <<= ;
if(g[n] > b) ans ^= ;
}
printf("%I64d", ans);
}
}
巴厘岛的雕塑 BZOJ 4069的更多相关文章
- bzoj 4069 [Apio2015]巴厘岛的雕塑 dp
[Apio2015]巴厘岛的雕塑 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 494 Solved: 238[Submit][Status][Dis ...
- bzoj千题计划239:bzoj4069: [Apio2015]巴厘岛的雕塑
http://www.lydsy.com/JudgeOnline/problem.php?id=4069 a!=1: 从高位到低位一位一位的算 记录下哪些位必须为0 dp[i][j] 表示前i个数分为 ...
- bzoj4069【APIO2015】巴厘岛的雕塑
4069: [Apio2015]巴厘岛的雕塑 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 192 Solved: 89 [Submit][Stat ...
- [APIO2015]巴厘岛的雕塑 --- 贪心 + 枚举
[APIO2015]巴厘岛的雕塑 题目描述 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有\(N\)座雕塑,为方便起见,我们把这些雕塑从 1 到\(N\)连续地进行 ...
- 【BZOJ4069】【APIO2015】巴厘岛的雕塑 [贪心][DP]
巴厘岛的雕塑 Time Limit: 10 Sec Memory Limit: 64 MB[Submit][Status][Discuss] Description 印尼巴厘岛的公路上有许多的雕塑, ...
- 【BZOJ4069】[Apio2015]巴厘岛的雕塑 按位贪心+DP
[BZOJ4069][Apio2015]巴厘岛的雕塑 Description 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有 N 座雕塑,为方便起见,我们把这些雕塑从 ...
- 巴厘岛的雕塑(sculptures)
巴厘岛的雕塑(sculptures) 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有 N 座雕塑,为方便起见,我们把这些雕塑从 1 到 N 连续地进行标号,其中第 i ...
- BZOJ 4069 [Apio2015]巴厘岛的雕塑 ——贪心
自己首先想了一种方法$f(i)$表示前$i$个最小值为多少. 然而发现位运算并不满足局部最优性. 然后我们可以从高到低贪心的判断,使得每一组的和在一个特定的范围之内. 还要特判最后一个Subtask, ...
- bzoj 4069: [Apio2015]巴厘岛的雕塑【dp】
居然要对不同的数据写不同的dp= = 首先记得开long long,<<的时候要写成1ll<<bt 根据or的性质,总体思路是从大到小枚举答案的每一位,看是否能为0. 首先对于 ...
随机推荐
- 在web应用中使用日志
Log4J是Jakarta下的一个开源代码的子项目,用Log4J,我们可以使用定制的格式,把调试信息和日志信息输出到一个或多个需要的地方. 在Web应用中一般使用一个专门的Servlet来完成Log4 ...
- 一个典型的flex布局,兼容性比较好
html 代码: <body class="flex-wrap col-flex"> <header class="midCenter flex-wra ...
- CPP-基础:wchar_t
目 录 1简介 2例如 3将char转换成wchar_t 1.简介 wchar_t是C/C++的字符数据类型,是一种扩展的字符存储方式,wchar_t类型主要用在国际化程序的实现中,但它不等同于uni ...
- Web性能优化系列:10个JavaScript性能提升的技巧
由 伯乐在线 - Delostik 翻译,黄利民 校稿.未经许可,禁止转载!英文出处:jonraasch.com.欢迎加入翻译小组. Nicholas Zakas是一位 JS 大师,Yahoo! 首页 ...
- Repbase library|divergence rate|self-sequence alignment|genomic rearrangement|cutoffs|breakpoint
(Panda, dog and human repeat comparison):与其他动物比较重复序列 我们使用Repbase 库(重复序列库)+已知的转录原件序列+识别软件,评估出转录原件占比,并 ...
- MySQL数据库安全配置
文章来源:http://www.xfocus.net MySQL数据库安全配置 1.前言 MySQL 是完全网络化的跨平台关系型数据库系统,同时是具有客户机/服务器体系结构的分布式数据库管理系统.它具 ...
- Bootstrap历练实例:表单控件大小
表单控件大小 您可以分别使用 class .input-lg 和 .col-lg-* 来设置表单的高度和宽度. 实例: <!DOCTYPE html><html><hea ...
- shell脚本,awk数组之如何处理多个文件。
[root@localhost | > file [root@localhost - | > file1 [root@localhost awk]# cat file [root@loca ...
- history.pushState 实现浏览器页面不刷新修改url链接
最近遇到了在不刷新页面的情况下修改浏览器url链接的需求,遂求助于万能的度娘,最终通过history.pushState()完美解决问题.现在将我理解的一些内容分享一下,不对的地方欢迎大家指出. 在使 ...
- codevs 数字三角形集结
添在前面的一句话:初学DP,若有错误,请指出,不能误人子弟,欢迎大家提出意见.水平不高,博客写的比较粗糙,代码也挺丑,请见谅. 最原始的数字三角形: 1220 数字三角形 时间限制: 1 s 空间 ...