[HNOI2012]集合选数 --- 状压DP
[HNOI2012]集合选数
题目描述
《集合论与图论》这门课程有一道作业题,要求同学们求出\({1,2,3,4,5}\)的所有满足以 下条件的子集:若 x 在该子集中,则 2x 和 3x 不能在该子集中。
同学们不喜欢这种具有枚举性 质的题目,于是把它变成了以下问题:对于任意一个正整数,
如何求出\({1,2,3...n}\) 的满足上述约束条件的子集的个数(只需输出对 \(10^{9}+1\) 取模的结果),现在这个问题就交给你了。
输入格式:
只有一行,其中有一个正整数 \(n\)
30%的数据满足 \(n<=20\)。
100%数据满足 \(n<=100000\)。
输出格式:
仅包含一个正整数,表示\({1, 2,..., n}\)有多少个满足上述约束条件 的子集。
\begin{bmatrix}
&1 &2 &4 &8 \;\;\\
&3 &6 &12 &24 \;\;\\
&9 &18 &36 &72 \;\;
\end{bmatrix}
#include <cstdio>
#include <cstring>
#include <bitset>
#define mod (100000001)
#define sid 200050
#define ri register int
using namespace std; inline void up(int &x, int y) {
x += y; if(x >= mod) x -= mod;
} inline void mu(int &x, int y) {
long long tmp = (1ll * x * y) % mod;
x = (int)tmp;
} int n;
bitset <> flag;
int num[][], lim[], bit[];
int dp[][sid], ans = ; inline int Solve(int kp) {
memset(num, , sizeof(num));
num[][] = kp;
for(ri i = ; i <= ; i ++) lim[i] = ;
for(ri i = ; i <= ; i ++)
if(num[][i - ] * <= n) num[][i] = num[][i - ] * ;
for(ri i = ; i <= ; i ++) {
if(num[i - ][] * > n) break;
num[i][] = num[i - ][] * ;
for(ri j = ; j <= ; j ++)
if(num[i][j - ] * <= n) num[i][j] = num[i][j - ] * ;
}
for(ri i = ; i <= ; i ++)
for(ri j = ; j <= ; j ++)
if(num[i][j]) lim[i] |= bit[j - ], flag[num[i][j]] = ;
for(ri i = ; i <= ; i ++)
for(ri j = ; j <= lim[i]; j ++) dp[i][j] = ;
dp[][] = ;
for(ri i = ; i <= ; i ++)
for(ri j = ; j <= lim[i - ]; j ++)
if(dp[i - ][j])
for(ri k = ; k <= lim[i]; k ++)
if((k & (k >> )) == && (j & k) == )
up(dp[i][k], dp[i - ][j]);
return dp[][];
} inline void DP() {
for(ri i = ; i <= ; i ++) bit[i] = << i;
for(ri i = ; i <= n; i ++) if(!flag[i]) mu(ans, Solve(i));
printf("%d\n", ans);
} int main() {
scanf("%d", &n);
DP();
return ;
}
sad
[HNOI2012]集合选数 --- 状压DP的更多相关文章
- bzoj 2734: [HNOI2012]集合选数 状压DP
2734: [HNOI2012]集合选数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 560 Solved: 321[Submit][Status ...
- BZOJ 2734 [HNOI2012]集合选数 (状压DP、时间复杂度分析)
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2734 题解 嗯早就想写的题,昨天因为某些不可告人的原因(大雾)把这题写了,今天再来写题解 ...
- 洛谷$P3226\ [HNOI2012]$集合选数 状压$dp$
正解:$dp$ 解题报告: 传送门$QwQ$ 考虑列一个横坐标为比值为2的等比数列,纵坐标为比值为3的等比数列的表格.发现每个数要选就等价于它的上下左右不能选. 于是就是个状压$dp$板子了$QwQ$ ...
- $HNOI2012\ $ 集合选数 状压$dp$
\(Des\) 求对于正整数\(n\leq 1e5\),{\(1,2,3,...,n\)}的满足约束条件:"若\(x\)在该子集中,则\(2x\)和\(3x\)不在该子集中."的子 ...
- bzoj 2734 [HNOI2012]集合选数 状压DP+预处理
这道题很神啊…… 神爆了…… 思路大家应该看别的博客已经知道了,但大部分用的插头DP.我加了预处理,没用插头DP,一行一行来,速度还挺快. #include <cstdio> #inclu ...
- 【BZOJ-2732】集合选数 状压DP (思路题)
2734: [HNOI2012]集合选数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1070 Solved: 623[Submit][Statu ...
- 【BZOJ-2734】集合选数 状压DP (思路题)
2734: [HNOI2012]集合选数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1070 Solved: 623[Submit][Statu ...
- BZOJ_2734_[HNOI2012]集合选数_构造+状压DP
BZOJ_2734_[HNOI2012]集合选数_构造+状压DP 题意:<集合论与图论>这门课程有一道作业题,要求同学们求出{1, 2, 3, 4, 5}的所有满足以 下条件的子集:若 x ...
- 2734: [HNOI2012]集合选数
2734: [HNOI2012]集合选数 链接 分析: 转化一下题意. 1 3 9 27... 2 6 18 54... 4 12 36 108... 8 24 72 216... ... 写成这样的 ...
随机推荐
- javaScript基础语法介绍
简介 JavaScript是一种脚本语言. (脚本,一条条的文字命令.执行时由系统的一个解释器,将其一条条的翻译成机器可识别的指令,然后执行.常见的脚本:批处理脚本.T-SQL脚本.VBScript等 ...
- 【洛谷P2515【HAOI2010】】软件安装
题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和最大). 但是 ...
- Problem 2278 YYS (FZU + java大数)
题目链接:http://acm.fzu.edu.cn/problem.php?pid=2278 题目: 题意: 有n种卡牌,每种卡牌被抽到的概率为1/n,求收齐所有卡牌的天数的期望. 思路: 易推得公 ...
- python初步学习-python函数 (二)
几个特殊的函数(待补充) python是支持多种范型的语言,可以进行所谓函数式编程,其突出体现在有这么几个函数: filter.map.reduce.lambda.yield lambda >& ...
- 大聊Python----装饰器
什么是装饰器? 装饰器其实和函数没啥区别,都是用def去定义的,其本质就是函数,而功能就是装饰其他的函数,说白了就是为其他函数提供附加功能 装饰器有什么作用? 比如你是一个公司的员工,你所写的程序里有 ...
- 75.VS2013和opencv3.1.0开发环境配置
首先要做的就是 开发环境配置,具体过程如下: Step 1:OpenCV环境变量配置 我的电脑--->属性--->高级系统设置--->高级--->环境变量--->系统变量 ...
- Linux内核线程kernel thread详解--Linux进程的管理与调度(十)【转】
转自:http://blog.csdn.net/gatieme/article/details/51589205 日期 内核版本 架构 作者 GitHub CSDN 2016-06-02 Linux- ...
- SPOJ JZPLIT
Problem SPOJ Solution 考虑任意一个作为矩阵四个角的位置 \(r_i \oplus c_j\oplus a_{i,j}\oplus x_{i,j}=0\) \(r_i \oplus ...
- 斐讯路由器L(联)B(壁)K-码兑换包安全下车通道(图文教程)
大家好,最近大家比较关心的斐讯路由器如何下车问题,楼主亲自试提取了一遍,记录下过程,欢迎大家一起讨论. 言归正传,上图,上图! No.1 打开斐讯提供的良心k码退换通道: https://tech-s ...
- java版云笔记(七)之事务管理
事务管理 事务:程序为了保证业务处理的完整性,执行的一条或多条SQL语句. 事务管理:对事务中的SQL语句进行提交或者回滚. 事物管理对于企业应用来说是至关重要的,好使出现异常情况,它也可以保证数据的 ...