bzoj 4069: [Apio2015]巴厘岛的雕塑【dp】
2024-08-27 00:10:40
居然要对不同的数据写不同的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;
}
最新文章
- TensorFlow 在android上的Demo(1)
- 根目录97 <;input file>;标签,把图片上传到服务器(跟增删改查一起实现)
- JAVA 获取jdbc.properties配置信息
- 分布式Nginx缓存清理(PHP的socket编程)
- 【Sublime Text 3】插件
- 编写高效的Android代码
- 怎样通过Java程序提交yarn的mapreduce计算任务
- c++中的强制转换static_cast、dynamic_cast、reinterpret_cast的不同用法儿
- linux分区工具fdisk的使用
- JVM上的响应式流 — Reactor简介
- upstream timed out (110: Connection timed out) while reading response header from upstream, client:
- <;笔记>;原生PHP访问TP模板变量
- URL地址编码和解码
- Java IO--NIO(二)
- 运行supervisord -c /etc/supervisor/supervisord.conf 出错,解决办法
- CUDA ---- GPU架构(Fermi、Kepler)
- OSX系统添加定时任务 Linux crontab命令 定时执行py 文件 任务
- Deploying Cloud Foundry on OpenStack Juno and XenServer (Part II)
- Java堆空间溢出解决方法 Exception in thread ";main"; java.lang.OutOfMemoryError: Java heap space
- Android输入法部分遮挡UI的问题(与EditText框相切)
热门文章
- DELL IDRAC API接口开发文档翻译及client模块
- Java数组操作方法收集(快速判断某个值在这个数组中)
- Atomic Builtins - Using the GNU Compiler Collection (GCC) GCC 提供的原子操作
- Android KK后为何工厂模式下无法adb 无法重新启动机器 ?
- HTML的简单学习
- [数据集]新浪微博数据集MicroblogPCU
- Xcode6 设置LaunchImage图标
- bzoj3109【CQOI2013】新数独
- ExtJs 中获取 radiobutton 的值
- 2016/05/23 thinkphp M方法和D方法的区别