由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;
}

最新文章

  1. js中避免函数名和变量名跟别人冲突
  2. Maven基础配置—本地Maven配置
  3. AngularJs ngChange、ngChecked、ngClick、ngDblclick
  4. js库中$冲突的解决方法
  5. uva 1220
  6. 条款38:通过聚合设计has-a或者is-implemented-in-terms-of
  7. EF6 Database First (DbContext) - Change Schema at runtime
  8. 微软Build2014大会干货总结-2
  9. 为什么Java大数据是最火爆的编程语言?
  10. pip换源安装
  11. pytbull 手册
  12. “数学口袋精灵”App的第三个Sprint计划(总结与团队感悟)----开发日记
  13. Linux(centos7)上安装最新版R3.4.1
  14. Xshell 用鼠标选中一段文字后自动换行
  15. [转帖]ESXi、Linux、Windows获取机器序列号的方法
  16. Kettle定时抽取两个库中的两个表到目标库SYS_OPLOG表
  17. Java计算图的匹配率
  18. yum怎么用?
  19. jQuery学习总结2
  20. HTML字符转码

热门文章

  1. javascript数组常用的遍历方法
  2. DSL与GPL
  3. PartTime_网址_国外
  4. LeetCode 583 Delete Operation for Two Strings 删除两个字符串的不同部分使两个字符串相同,求删除的步数
  5. [luogu 3369]普通平衡树(fhq_treap)
  6. Emgu CV 初试
  7. SpringMVC 返回实体对象时屏蔽某些属性
  8. javascript中call()、apply()、bind()的用法理解
  9. vscode jsx语法自动补全html代码
  10. 从github克隆内容到本地时权限问题