题目链接

BZOJ3724

题解

构造矩阵的思路真的没想到

选\(x\)就不能选\(2x\)和\(3x\),会发现实际可以转化为矩阵相邻两项

\[\begin{matrix}1 & 3 & 9 & 27 & ... \\2 & 6 & 18 & 54 & ... \\4 & 12 & 36 & 108 & ... \\8 & 24 & 72 & 216 & ... \\ ... & ... &... &... &... \\ \end{matrix}
\]

相当于选这样的矩阵中不相邻的若干项的方案数

我们取每一个不是\(2\)和\(3\)的倍数的数作为矩阵左上角

行数和列数都很小,可以状压\(dp\)

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define mp(a,b) make_pair<int,int>(a,b)
#define cls(s) memset(s,0,sizeof(s))
#define cp pair<int,int>
#define LL long long int
using namespace std;
const int maxn = 20,maxm = (1 << 12),INF = 1000000000,P = 1000000001;
int f[maxn][maxm];
int N,n,cnt[maxn];
int ill[maxm],ans = 1;
void init(){
int t = 3;
for (int s = 0; s < maxm; s++){
for (int i = 0; i <= 10; i++)
if (((s & (t << i)) >> i) == t){
ill[s] = true; break;
}
}
}
void dp(int x){
for (n = 0; x <= N; x *= 2){
cnt[++n] = 0;
int t = x;
while (t <= N) cnt[n]++,t *= 3;
}
for (int i = 1; i <= n; i++)
for (int s = 0; s < (1 << cnt[i]); s++)
f[i][s] = 0;
for (int s = 0; s < (1 << cnt[1]); s++)
if (!ill[s]) f[1][s] = 1;
for (int i = 2; i <= n; i++)
for (int s = 0; s < (1 << cnt[i]); s++){
if (ill[s]) continue;
for (int e = 0; e < (1 << cnt[i - 1]); e++){
if (ill[e]) continue;
if (!(s & e)){
f[i][s] = (f[i][s] + f[i - 1][e]) % P;
}
}
}
int re = 0;
for (int s = 0; s < (1 << cnt[n]); s++)
re = (re + f[n][s]) % P;
ans = 1ll * ans * re % P;
}
int main(){
init();
scanf("%d",&N);
for (int i = 1; i <= N; i++){
if (i % 2 == 0 || i % 3 == 0) continue;
dp(i);
}
printf("%d\n",ans);
return 0;
}

最新文章

  1. plsql11.06注册码
  2. 解决UIButton 连续点击重复响应事件问题
  3. EF &ndash; 6.一对一关联
  4. VB.NET生成Excel,已存在提示框点否时报错
  5. __I、__O 、__IO volatile是什么?怎么用? .
  6. 关于ajax跨域问题
  7. JSP静态化(伪静态)
  8. DHTMLX 常用技术
  9. python(list、字典、元组、字符串方法、文件读写)草稿
  10. C#并行编程(3):并行循环
  11. 图数据库cayley+mongo的起航之旅
  12. CodeForces - 946D Timetable (分组背包+思维)
  13. Codeforces 260D - Black and White Tree
  14. go 算法 查询字符在字符串中的位置
  15. cherokee +php fastcgi 出现 No input file specified 故障一例
  16. es put mapping
  17. Maven 配置Tomcat
  18. Android控件——ToggleButton多状态按钮(实现灯泡的开关)
  19. 工业控制系统PLC、DCS、ESD
  20. mac安装mysql及workbench

热门文章

  1. runtime如何实现weak属性
  2. 了解ASP.NET Core 依赖注入,看这篇就够了
  3. Python数据可视化的10种技能
  4. Linux系统网络安装——基于pxe+dhcp+nfs+tftp+kickstart
  5. docker应用容器化准则—12 factor
  6. 从零开始的Python学习Episode 8——深浅拷贝
  7. .NET导出Excel之NPOI
  8. loadrunner socket协议问题归纳(5)
  9. 欢迎来怼第二周Scrum会议六(总第十三次)
  10. ssd a