Bzoj4069:[Apio2015]巴厘岛的雕塑:dp+贪心
题目链接:[Apio2015]巴厘岛的雕塑
一开始先写了个既错误又高复杂度的dp,令dp[i][j]=min(dp[i][k],dp[j][k-1]|(s[i]-s[j])),其中s[]代表前缀和
首先超时不说,在或的情况下单纯地每步取最小值无法保证全局的最优性,但是即使是这样我还是奇奇怪怪的过了好几个点QAQ
正解是这样的:
首先处理出答案最多的可能位数bit,然后倒序从最高位开始枚举每一位,由于∑2^i(0<i<n)<2^n+1,所以当前这一位能不选就不选
设dp[i][j]表示前i个数分成了j组并且满足已经枚举完的k位是否可行,可行为1否则为0
设当前最高的k位贡献的最小答案为ans,那么dp[i][j]=1当且仅当dp[k][j-1]==1&&((s[i]-s[k])>>(k+1+1))|ans)==ans&&((s[i]-s[k])>>(k+1)&1==0),即满足已经得到的最优答案并且当前枚举到得这一位为0,复杂度O(n^3)
但是发现a==1的时候我们就没有必要枚举分成了几段,设dp[i]表示前i个数满足要求的情况下最少分成几段然后和b比较判断可行性即可
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define LL long long
#define rep(i,x,y) for (int i=x;i<=y;++i)
#define dow(i,x,y) for (int i=x;i>=y;--i)
using namespace std;
const int maxn=2010;
const LL inf=1e16;
int n,a,b,f[maxn];
bool dp[maxn][maxn];
LL s[maxn];bool check(int bit,LL x,LL tmp){return (((x>>(bit+1))|tmp)==tmp&&((x>>bit)&1)==0);
}void solve1(int bit){LL ans=0;for (int d=bit;d>=0;d--){rep(i,1,n) {f[i]=n+1; rep(j,0,i-1){if (check(d,s[i]-s[j],ans)&&f[i]>f[j]+1)f[i]=f[j]+1;}}ans=ans<<1|(f[n]>b);}printf("%lld",ans);
}void solve2(int bit){LL ans=0;for (int d=bit;d>=0;d--){dp[0][0]=1;rep(i,1,n) rep(j,1,min(i,b)){dp[i][j]=0;for (int k=0;k<i&&!dp[i][j];k++)if (dp[k][j-1]&&check(d,s[i]-s[k],ans))dp[i][j]=1;}int tmp=1;for (int i=a;i<=b;++i)if (dp[n][i]){tmp=0;break;}ans=ans<<1|tmp;}printf("%lld",ans);
}int main(){scanf("%d%d%d",&n,&a,&b);rep(i,1,n) {LL x;scanf("%lld",&x);s[i]=s[i-1]+x;}int bit=0; while ((1LL<<bit)<s[n]) bit++;if (a==1)solve1(bit); else solve2(bit);
}
Bzoj4069:[Apio2015]巴厘岛的雕塑:dp+贪心相关推荐
- 4069: [Apio2015]巴厘岛的雕塑 DP+按位贪心
去年的我对位运算一无所知..所以在考场上直接没敢看题..之后据说搜索有分,错的DP有分.我的内心是崩溃的..然而就算看了题还是什么都不会写. 考虑按位贪心,从高位到低位枚举,用 fi,j f_{i,j ...
- 【BZOJ4069】[Apio2015]巴厘岛的雕塑 按位贪心+DP
[BZOJ4069][Apio2015]巴厘岛的雕塑 Description 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有 N 座雕塑,为方便起见,我们把这些雕塑从 ...
- [APIO2015]巴厘岛的雕塑[按位贪心+dp]
题意 给你长度为 \(n\) 的序列,要求分成 \(k\) 段连续非空的区间,求所有区间和的 \(or\) 最小值. 分析 定义 \(f_{i,j}\) 表示前 \(i\) 个点分成 \(j\) 段的 ...
- APIO2015巴厘岛的雕塑——数位DP
题目:https://www.luogu.org/problemnew/show/P3646 对于A>1,将答案各位全置1,然后从高位到低位改成0判断是否可行: 用f[i][j]数组代表前i个数 ...
- [APIO2015]巴厘岛的雕塑(数位dp)
[题解] 引用ZYF神犇一句话:"显然位运算的极值问题都应该从高位向低位考虑.优先让这一位为0,如果行的话这一位就是0,否则就设为1." 设答案为ans,从高位到低位枚举 是否有使 ...
- P3646 [APIO2015]巴厘岛的雕塑
非常好的二进制dp题 参考了这位大佬的思路:https://www.cnblogs.com/zbtrs/p/8495170.html #include<iostream> #include ...
- 【BZOJ4069】【APIO2015】巴厘岛的雕塑 [贪心][DP]
巴厘岛的雕塑 Time Limit: 10 Sec Memory Limit: 64 MB [Submit][Status][Discuss] Description 印尼巴厘岛的公路上有许多的雕塑 ...
- 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)
洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...
- 【BZOJ3174】【codevs25442075】拯救小矮人,DP+贪心
Time:2016.07.19 Author:xiaoyimi 转载注明出处谢谢 传送门1 传送门2 传送门3 思路: 比较神的DP "贪心确定DP的状态"--reflash 写了 ...
最新文章
- Bootstrap系列 -- 38. 基础导航条
- 阿里首席架构师科普RPC框架是什么
- Access restriction: The type BASE64Encoder is not accessible due to restrict
- 如何选择深度学习优化器
- .NET Core中的认证管理解析
- hash和hashcode_Hibernate事实:等于和HashCode
- 干货实战|基于Elastic Stack的日志分析系统
- 深度学习-超参数和交叉验证
- matlab读取数据 溢出,matlab读取400多兆的wav数据,内存溢出,如何解决
- u8虚拟服务器端口,用友u8服务器参数配置
- .Net MVC中SelectList绑定默认值失效的解决办法
- matlab 弹簧,利用Matlab进行弹簧振子运动
- go获取当前工作路径
- html怎么把网址设为首页,怎样让网站设为首页和加入收藏
- python调用高德api路径规划_Python调用高德API爬取异地驾驶距离
- 虚拟服务器钟楼古城微博,最无聊中外钟楼微博走红
- 景区介绍界面(Android)
- 海洋经济发展具体内容
- 计算机对水利方面的影响,计算机技术对于水利工程信息化系统的优化作用
- 基于ssm的流浪猫狗救助网站(包含数据库、完美运行、可远程调试)
热门文章
- android手机经常提示SD卡已损坏,要求格式化的解决方法
- f.readlines()坑
- 渗透一条龙服务(极速版)
- 51单片机学习笔记:基于状态机的按键对时程序(短按,长按,连发)
- 前端项目中使用excel等office办公软件
- 批量下载某些网站的在线视频(如:bibi,优酷等)
- xargs使用教程:在实战中学习xargs
- GRPC 正向代理实现
- 湖北大学计算机考入清华,“倒数第一”考入了清华?网友:兄弟,事发了
- 微信公众号无限回调授权系统源码