题目链接:[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+贪心相关推荐

  1. 4069: [Apio2015]巴厘岛的雕塑 DP+按位贪心

    去年的我对位运算一无所知..所以在考场上直接没敢看题..之后据说搜索有分,错的DP有分.我的内心是崩溃的..然而就算看了题还是什么都不会写. 考虑按位贪心,从高位到低位枚举,用 fi,j f_{i,j ...

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

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

  3. [APIO2015]巴厘岛的雕塑[按位贪心+dp]

    题意 给你长度为 \(n\) 的序列,要求分成 \(k\) 段连续非空的区间,求所有区间和的 \(or\) 最小值. 分析 定义 \(f_{i,j}\) 表示前 \(i\) 个点分成 \(j\) 段的 ...

  4. APIO2015巴厘岛的雕塑——数位DP

    题目:https://www.luogu.org/problemnew/show/P3646 对于A>1,将答案各位全置1,然后从高位到低位改成0判断是否可行: 用f[i][j]数组代表前i个数 ...

  5. [APIO2015]巴厘岛的雕塑(数位dp)

    [题解] 引用ZYF神犇一句话:"显然位运算的极值问题都应该从高位向低位考虑.优先让这一位为0,如果行的话这一位就是0,否则就设为1." 设答案为ans,从高位到低位枚举 是否有使 ...

  6. P3646 [APIO2015]巴厘岛的雕塑

    非常好的二进制dp题 参考了这位大佬的思路:https://www.cnblogs.com/zbtrs/p/8495170.html #include<iostream> #include ...

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

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

  8. 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)

    洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...

  9. 【BZOJ3174】【codevs25442075】拯救小矮人,DP+贪心

    Time:2016.07.19 Author:xiaoyimi 转载注明出处谢谢 传送门1 传送门2 传送门3 思路: 比较神的DP "贪心确定DP的状态"--reflash 写了 ...

最新文章

  1. Bootstrap系列 -- 38. 基础导航条
  2. 阿里首席架构师科普RPC框架是什么
  3. Access restriction: The type BASE64Encoder is not accessible due to restrict
  4. 如何选择深度学习优化器
  5. .NET Core中的认证管理解析
  6. hash和hashcode_Hibernate事实:等于和HashCode
  7. 干货实战|基于Elastic Stack的日志分析系统
  8. 深度学习-超参数和交叉验证
  9. matlab读取数据 溢出,matlab读取400多兆的wav数据,内存溢出,如何解决
  10. u8虚拟服务器端口,用友u8服务器参数配置
  11. .Net MVC中SelectList绑定默认值失效的解决办法
  12. matlab 弹簧,利用Matlab进行弹簧振子运动
  13. go获取当前工作路径
  14. html怎么把网址设为首页,怎样让网站设为首页和加入收藏
  15. python调用高德api路径规划_Python调用高德API爬取异地驾驶距离
  16. 虚拟服务器钟楼古城微博,最无聊中外钟楼微博走红
  17. 景区介绍界面(Android)
  18. 海洋经济发展具体内容
  19. 计算机对水利方面的影响,计算机技术对于水利工程信息化系统的优化作用
  20. 基于ssm的流浪猫狗救助网站(包含数据库、完美运行、可远程调试)

热门文章

  1. android手机经常提示SD卡已损坏,要求格式化的解决方法
  2. f.readlines()坑
  3. 渗透一条龙服务(极速版)
  4. 51单片机学习笔记:基于状态机的按键对时程序(短按,长按,连发)
  5. 前端项目中使用excel等office办公软件
  6. 批量下载某些网站的在线视频(如:bibi,优酷等)
  7. xargs使用教程:在实战中学习xargs
  8. GRPC 正向代理实现
  9. 湖北大学计算机考入清华,“倒数第一”考入了清华?网友:兄弟,事发了
  10. 微信公众号无限回调授权系统源码