居然要对不同的数据写不同的dp= =

首先记得开long long,<<的时候要写成1ll<<bt

根据or的性质,总体思路是从大到小枚举答案的每一位,看是否能为0.

首先对于A=1的情况,因为没有最小值限制,所以设f[i]为到i为止,当前位能为0的最小长度。判断f[n]是否小于等于B即可。注意保证当前位为0的前提下也要保证之前枚举的位不变。时间复杂度是\( O(nlog_2nlog_2ans) \)

对于其他情况(n<=100),设f[i][j]表示枚举到i为止已经分了j段是否能让当前位为0.最后判断是否有f[n][a]~f[n][b]中为ture即可。时间复杂度是\( O(n^2log_2nlog_2ans) \).

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=2005,inf=1e9;
int n,a,b;
long long s[N],bt,ans;
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
bool ok(long long x)
{
x>>=bt,x<<=bt;
return (x|ans)==ans;
}
int main()
{
n=read(),a=read(),b=read();
for(int i=1;i<=n;i++)
s[i]=s[i-1]+read();
for(long long x=s[n];x;x>>=1,bt++);
if(a==1)
{
int f[N];
for(;bt>=0;bt--)
{
f[0]=0;
for(int i=1;i<=n;i++)
{
f[i]=inf;
for(int j=0;j<i;j++)
if(f[i]>f[j]+1&&ok(s[i]-s[j]))
f[i]=f[j]+1;
}
if(f[n]>b)
ans|=(1ll<<bt);
}
}
else
{
bool f[105][105];
for(;bt>=0;bt--)
{
memset(f,0,sizeof(f));
f[0][0]=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=i&&j<=b;j++)
for(int k=0;k<i&&!f[i][j];k++)
if(f[k][j-1]&&ok(s[i]-s[k]))
f[i][j]=1;
bool ok=0;
for(int i=a;i<=b;i++)
if(f[n][i])
{
ok=1;
break;
}
if(!ok)
ans|=(1ll<<bt);
}
}
printf("%lld\n",ans);
return 0;
}

最新文章

  1. TensorFlow 在android上的Demo(1)
  2. 根目录97 &lt;input file&gt;标签,把图片上传到服务器(跟增删改查一起实现)
  3. JAVA 获取jdbc.properties配置信息
  4. 分布式Nginx缓存清理(PHP的socket编程)
  5. 【Sublime Text 3】插件
  6. 编写高效的Android代码
  7. 怎样通过Java程序提交yarn的mapreduce计算任务
  8. c++中的强制转换static_cast、dynamic_cast、reinterpret_cast的不同用法儿
  9. linux分区工具fdisk的使用
  10. JVM上的响应式流 — Reactor简介
  11. upstream timed out (110: Connection timed out) while reading response header from upstream, client:
  12. &lt;笔记&gt;原生PHP访问TP模板变量
  13. URL地址编码和解码
  14. Java IO--NIO(二)
  15. 运行supervisord -c /etc/supervisor/supervisord.conf 出错,解决办法
  16. CUDA ---- GPU架构(Fermi、Kepler)
  17. OSX系统添加定时任务 Linux crontab命令 定时执行py 文件 任务
  18. Deploying Cloud Foundry on OpenStack Juno and XenServer (Part II)
  19. Java堆空间溢出解决方法 Exception in thread &quot;main&quot; java.lang.OutOfMemoryError: Java heap space
  20. Android输入法部分遮挡UI的问题(与EditText框相切)

热门文章

  1. DELL IDRAC API接口开发文档翻译及client模块
  2. Java数组操作方法收集(快速判断某个值在这个数组中)
  3. Atomic Builtins - Using the GNU Compiler Collection (GCC) GCC 提供的原子操作
  4. Android KK后为何工厂模式下无法adb 无法重新启动机器 ?
  5. HTML的简单学习
  6. [数据集]新浪微博数据集MicroblogPCU
  7. Xcode6 设置LaunchImage图标
  8. bzoj3109【CQOI2013】新数独
  9. ExtJs 中获取 radiobutton 的值
  10. 2016/05/23 thinkphp M方法和D方法的区别