UOJ#110. 【APIO2015】Bali Sculptures 贪心 动态规划
原文链接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)$ 。
代码
#include <bits/stdc++.h>
#define clr(x) memset(x,0,sizeof (x))
using namespace std;
typedef long long LL;
LL read(){
LL x=0,f=0;
char ch=getchar();
while (!isdigit(ch))
f|=ch=='-',ch=getchar();
while (isdigit(ch))
x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return f?-x:x;
}
const int N=2005;
int n,A,B;
LL a[N];
void ckMin(int &x,int y){
x=x<y?x:y;
}
namespace so1{
const int N=105;
int dp[N][N];
int check(LL v){
clr(dp);
dp[0][0]=1;
for (int i=1;i<=n;i++)
for (int j=0;j<i;j++)
if ((v|(a[i]-a[j]))==v)
for (int k=0;k<n;k++)
dp[i][k+1]|=dp[j][k];
for (int i=1;i<=n;i++)
if (A<=i&&i<=B&&dp[n][i])
return 1;
return 0;
}
void main(){
LL ans=0;
for (int i=40;i>=0;i--)
if (!check(ans|((1LL<<i)-1)))
ans|=1LL<<i;
cout<<ans<<endl;
}
}
namespace so2{
const int N=2005;
int dp[N][2];
void main(){
LL ans=0;
for (int d=40;d>=0;d--){
for (int i=0;i<N;i++)
dp[i][0]=dp[i][1]=1e9;
dp[0][0]=0;
LL v=ans|((1LL<<(d+1))-1);
for (int i=1;i<=n;i++)
for (int j=0;j<i;j++)
if ((v|(a[i]-a[j]))==v)
for (int t=0;t<2;t++)
ckMin(dp[i][t|((a[i]-a[j])>>d&1LL)],dp[j][t]+1);
if (dp[n][0]>B)
ans|=1LL<<d;
}
cout<<ans<<endl;
}
}
int main(){
n=read(),A=read(),B=read();
for (int i=1;i<=n;i++)
a[i]=a[i-1]+read();
if (n<=100)
so1::main();
else
so2::main();
return 0;
}
UOJ#110. 【APIO2015】Bali Sculptures 贪心 动态规划的更多相关文章
- 【51Nod】1510 最小化序列 贪心+动态规划
[题目]1510 最小化序列 [题意]给定长度为n的数组A和数字k,要求重排列数组从而最小化: \[ans=\sum_{i=1}^{n-k}|A_i-A_{i+k}|\] 输出最小的ans,\(n \ ...
- nyoj 16-矩形嵌套(贪心 + 动态规划DP)
16-矩形嵌套 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:13 submit:28 题目描述: 有n个矩形,每个矩形可以用a,b来描述,表示长和 ...
- UOJ#110. 【APIO2015】Bali Sculptures
印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有 NN 座雕塑,为方便起见,我们把这些雕塑从 11 到 NN 连续地进行标号,其中第 ii 座雕塑的年龄是 YiYi 年 ...
- 【UOJ #110】【APIO 2015】Bali Sculptures
http://uoj.ac/problem/110 这道题subtask4和subtask5是不同的算法. 主要思想都是从高位到低位贪心确定答案. 对于subtask4,n比较小,设\(f(i,j)\ ...
- 【APIO2015】Bali Sculptures
题目描述 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有 $N$ 座雕塑,为方便起见,我们把这些雕塑从 $1$ 到 $N$ 连续地进行标号,其中第 $i$ 座雕塑的年 ...
- UOJ#345. 【清华集训2017】榕树之心 贪心,动态规划
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ345.html 前言 我真的是越来越菜了,连树形DP都感觉陌生了. 题解 首先,我们来看看在不断生长叶子会 ...
- 【LOJ】#2886. 「APIO2015」巴厘岛的雕塑 Bali Sculptures
题解 感觉自己通过刷水题混LOJ刷题量非常成功 首先是二进制枚举位,判是否合法 要写两个solve不是很开心,\(A\)不为1的直接记录状态\(f[i][j]\)为能否到达前\(i\)个分成\(j\) ...
- POJ1065 Wooden Sticks(贪心+动态规划——单调递减或递增序列)
描述 C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间,如果第i+1个木棒的重量和长度都大于等于 第i个处理的木棒,那么将不会耗费时间,否则 ...
- BZOJ 3227 [Sdoi2008]红黑树(tree) ——贪心 动态规划
首先可以想到一个贪心的方法,然后一层一层的合并. 也可以采用动态规划的方式,为了写起来好写,把点数*2+1,然后发现在本机上跑不过1500的数据. 交上去居然A掉了. 贪心 #include < ...
随机推荐
- HTML5特性之AJAX跨域
js跨域问题一般会考虑iframe.jsonp. 后端语言设置响应头:header('Access-Control-Allow-Origin:*),*号表示允许所有域名,可以将*号改为指定允许的访问域 ...
- pestle.phar
nstalll: 1,cd /usr/local/bin && curl -LO http://pestle.pulsestorm.net/pestle.phar : 2,chmod ...
- 【并发编程】【JDK源码】CAS与synchronized
线程安全 众所周知,Java是多线程的.但是,Java对多线程的支持其实是一把双刃剑.一旦涉及到多个线程操作共享资源的情况时,处理不好就可能产生线程安全问题.线程安全性可能是非常复杂的,在没有充足的同 ...
- badboy安装及使用
badboy下载 下载地址:http://www.badboy.com.au/download/index 直接点击[continue] badboy安装 badboy录制 默认是录制状态 访问sog ...
- python学习day8 文件操作(深度学习)
文件操作 (day7内容扩展) 1 文件基本操作 obj = open('路径',mode='模式',encoding='编码')obj.write()obj.read()obj.close() 2 ...
- Zookeeper与Curator二三事【坑爹】
起因:我的Dubbo服务起不来:我本地Zookeeper3.4.11,Curator4.1 Caused by: org.apache.zookeeper.KeeperException$Unimpl ...
- mybatis 模糊查询 like的三种方式
第一种 public void selectBykeyWord(String keyword) { String id = "%" + keyword + "%" ...
- Linux测试硬盘读性能的常用工具-hdparm和dd俩搭档
Linux测试硬盘读性能的常用工具-hdparm和dd俩搭档 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.hparm # 它用来在基于 Linux的系统上获取或 ...
- Ceph集群搭建及Kubernetes上实现动态存储(StorageClass)
集群准备 ceph集群配置说明 节点名称 IP地址 配置 作用 ceph-moni-0 10.10.3.150 centos7.5 4C,16G,200Disk 管理节点,监视器 monitor ...
- MySQL学习笔记(一)Ubuntu16.04中MySQL安装配置(5.6优化、错误日志、DNS解决)
目录 第一部分.5.6安装.配置.自动备份 第二部分.5.7源码安装.配置.自动备份 第一部分.5.6安装 1.安装mysql sudo apt-get install mysql-server su ...