[JZOJ] 5935. 小凯学数学
2024-10-21 09:22:14
由Noip2018初赛的知识得,a|b + a&b = a+b
设计一个区间dp,设\(f[l][r][x]\)表示区间\([l,r]\)能否构成\(x\),数据不大,转移暴力枚举
复杂度\(O(n^3\times MAXN^3)\)
#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
inline int rd(){
int ret=0,f=1;char c;
while(c=getchar(),!isdigit(c))f=c=='-'?-1:1;
while(isdigit(c))ret=ret*10+c-'0',c=getchar();
return ret*f;
}
#define space() putchar(' ')
#define nextline() putchar('\n')
void pot(int x){if(!x)return;pot(x/10);putchar('0'+x%10);}
void out(int x){if(!x)putchar('0');if(x<0)putchar('-'),x=-x;pot(x);}
const int MAXN = 155;
bool f[MAXN][MAXN][8];
int n;
int main(){
n=rd();
for(int i=1;i<=n;i++)f[i][i][rd()]=1;
for(int len=2;len<=n;len++){
for(int i=1;i+len-1<=n;i++){
int j=i+len-1;
for(int k=i;k<j;k++){
for(int x=0;x<=7;x++){
for(int y=0;y<=7;y++){
for(int z=0;z<=7;z++){
if(((y+z)>>1)!=x)continue;
f[i][j][x]|=f[i][k][y]&f[k+1][j][z];
}
}
}
}
}
}
for(int i=0;i<=7;i++) if(f[1][n][i]) out(i),space();
return 0;
}
最新文章
- js中避免函数名和变量名跟别人冲突
- Maven基础配置—本地Maven配置
- AngularJs ngChange、ngChecked、ngClick、ngDblclick
- js库中$冲突的解决方法
- uva 1220
- 条款38:通过聚合设计has-a或者is-implemented-in-terms-of
- EF6 Database First (DbContext) - Change Schema at runtime
- 微软Build2014大会干货总结-2
- 为什么Java大数据是最火爆的编程语言?
- pip换源安装
- pytbull 手册
- “数学口袋精灵”App的第三个Sprint计划(总结与团队感悟)----开发日记
- Linux(centos7)上安装最新版R3.4.1
- Xshell 用鼠标选中一段文字后自动换行
- [转帖]ESXi、Linux、Windows获取机器序列号的方法
- Kettle定时抽取两个库中的两个表到目标库SYS_OPLOG表
- Java计算图的匹配率
- yum怎么用?
- jQuery学习总结2
- HTML字符转码
热门文章
- javascript数组常用的遍历方法
- DSL与GPL
- PartTime_网址_国外
- LeetCode 583 Delete Operation for Two Strings 删除两个字符串的不同部分使两个字符串相同,求删除的步数
- [luogu 3369]普通平衡树(fhq_treap)
- Emgu CV 初试
- SpringMVC 返回实体对象时屏蔽某些属性
- javascript中call()、apply()、bind()的用法理解
- vscode jsx语法自动补全html代码
- 从github克隆内容到本地时权限问题