非常好的二进制dp题

参考了这位大佬的思路:https://www.cnblogs.com/zbtrs/p/8495170.html

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
const ll N=2e3+10,inf=1e18;
ll n,A,B,len,ans,s[N],f[N][N],g[N];
inline ll read(){ll x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;
}
inline void solve1(){while(len){for(ll i=1;i<=n;i++) for(ll j=1;j<=min(i,B);j++) f[i][j]=0;f[0][0]=1;for(ll i=1;i<=n;i++){for(ll j=1;j<=min(i,B);j++){for(int k=0;k<i;k++){if(f[k][j-1]){ll t=s[i]-s[k];if((!(t&(1ll<<(len-1))))&&((ans|(t>>len))==ans)) f[i][j]=1;}}}}int flag=0;for(int i=A;i<=B;i++) if(f[n][i]){flag=1;break;}if(flag) ans=ans<<1;else ans=ans<<1|1; len--;}
}
inline void solve2(){while(len){for(int i=1;i<=n;i++) g[i]=inf;for(int i=1;i<=n;i++){for(int j=0;j<i;j++){ll t=s[i]-s[j];if((!(t&(1ll<<(len-1))))&&((ans|(t>>len))==ans)) g[i]=min(g[i],g[j]+1);}}if(g[n]>B) ans=ans<<1|1;else ans=ans<<1;len--;}
}
int main(){n=read();A=read();B=read();for(int i=1;i<=n;i++) s[i]=s[i-1]+read();ll t=s[n];len=0;while(t){len++;t>>=1;}if(A!=1) solve1();else solve2();return printf("%lld\n",ans),0;
}

转载于:https://www.cnblogs.com/xtkm/p/10825729.html

P3646 [APIO2015]巴厘岛的雕塑相关推荐

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

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

  2. Bzoj4069:[Apio2015]巴厘岛的雕塑:dp+贪心

    题目链接:[Apio2015]巴厘岛的雕塑 一开始先写了个既错误又高复杂度的dp,令dp[i][j]=min(dp[i][k],dp[j][k-1]|(s[i]-s[j])),其中s[]代表前缀和 首 ...

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

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

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

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

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

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

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

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

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

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

  8. [APIO2015] T1巴厘岛的雕塑

    题目传送门 题目范围如果要求用longlonglong\ longlong long,在左移的时候一定要写成1LL1LL1LL! 题意 巴厘岛的一条主干道上共有NNN座雕塑,依次编号为111到NNN. ...

  9. 【简●解】巴厘岛的雕塑

    [大意] 给定\(A\),\(B\),使一个区间的元素分为\(A\le x\le B\)组,每组的贡献为组内元素之和,最小化所有组贡献的或运算和. [分析] 开始一晃眼没看见区间连续这个条件,感觉做了 ...

最新文章

  1. golang中的recover
  2. [转] Windows Server 2012 Beta Cluster (Hyper-V 3.0)-iSCSI篇
  3. UNION JOIN 连接表
  4. 原创 leetcode/力扣 背包问题大总结,BAT程序员完整学习手册PDF开放下载!
  5. FFmpeg + SDL 的视频播放器的制作视频(雷神,雷霄骅)
  6. Python安装shapely包出现WindowsError: [Error 126]解决方案
  7. 将QMessageBox对话框中按钮的“Yes/No”转换成中文的“是/否”
  8. 手游脚本_雷电模拟器
  9. NEFU 262 贪吃的九头龙(树形背包,4级)
  10. 做好这几点,安心睡个好觉
  11. 2022全网最全的爆款抓包工具,各有千秋
  12. wpscan扫描的简单介绍(对WordPress的扫描CMS)
  13. 2020年冬小麦越冬期长势监测卫星遥感影像解读
  14. QListWidget removeItemWidget注意事项
  15. 飞秒激光脉冲的产生过程
  16. 分享个md生成思维导图的在线工具
  17. DXP_protel2004_原理图设计基础_新建和添加原理图库文件
  18. 《茶馆》再开张 这出戏濮存昕、冯远征演了20年
  19. Java面向对象(类的无参和带参)
  20. Fibonacci数列通项公式推导

热门文章

  1. kaggle数据集下载步骤
  2. Python获取中国疫情数据(最新版)
  3. 手机python代码写好了怎么运行-如何优雅的在手机上进行Python编程
  4. JTable深入浅出
  5. (SVN+SSH)搭建SVN并使用SSH进行免密拉取推送代码
  6. 临床试验中edc录入_临床试验中使用EDC的情况?
  7. linux环境变量自定义环境变量
  8. GitHub使用教程详解(下)——Git的安装以及Git命令详解
  9. SQL语句去连接两个表,内连接,左连接以及右连接
  10. STM32使用ADC+DMA进行多通道模拟量采集 (踩坑及傻瓜式解析)