博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3724 [HNOI2012]集合选数 【状压dp】
阅读量:5241 次
发布时间:2019-06-14

本文共 1725 字,大约阅读时间需要 5 分钟。

题目链接

题解

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

\(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
#include
#include
#include
#include
#include
#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
(a,b)#define cls(s) memset(s,0,sizeof(s))#define cp pair
#define LL long long intusing 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;}

转载于:https://www.cnblogs.com/Mychael/p/9163392.html

你可能感兴趣的文章
Java基础知识强化之集合框架笔记06:Collection集合存储自定义对象并遍历的案例...
查看>>
Android(java)学习笔记25:Android 手机拨号
查看>>
Linux ftp访问控制配置,包括访问ftp权限和访问ftp目录权限
查看>>
leetcode[148]Sort List
查看>>
ES6 Array扩展 学习笔记
查看>>
Swoole WebSocket 的应用
查看>>
Linux源码编译安装nginx
查看>>
Java异常知识处理_NoClassDefFoundError和ClassNotFoundException有什么区别
查看>>
[bbk5388] 第91集 -第11章 -数据库诊断 07
查看>>
CentOS7 安装 JIRA 7.2.x 教程:下载、安装、汉化、破解
查看>>
iOS RunTime你知道了总得用一下
查看>>
unity使用深度优先搜索算法自动生成随机迷宫
查看>>
python全栈开发-Day12 三元表达式、函数递归、匿名函数
查看>>
末公开的存储过程.txt
查看>>
Photoshop剪切板故障修复
查看>>
TCPDF 5.9.195 发布 - PHP PDF 生成工具
查看>>
GFeedLine 2.0.4 发布,社交网络客户端
查看>>
Windows Service 的注册和卸载
查看>>
C#泛型
查看>>
c/s与b/s 动态网站与静态网站 (网站编码统一“UTF-8”)
查看>>