Description

《集合论与图论》这门课程有一道作业题,要求同学们求出{1, 2, 3, 4, 5}的所有满足以 下条件的子集:若 x 在该子集中,则 2x 和 3x 不能在该子集中。同学们不喜欢这种具有枚举性 质的题目,于是把它变成了以下问题:对于任意一个正整数 n≤100000,如何求出{1, 2,..., n} 的满足上述约束条件的子集的个数(只需输出对 1,000,000,001 取模的结果),现在这个问题就 交给你了。

Input

只有一行,其中有一个正整数 n,30%的数据满足 n≤20。

Output

仅包含一个正整数,表示{1, 2,..., n}有多少个满足上述约束条件 的子集。

状压dp

将问题转化为在求图上选不相邻的点的总方案数

1 3 9 27 81
2 6 18 54 162
4 12 36 108 324
8 24 72 216 ...
16 48 144 ...  
5 15 45 135
10 30 90 270
20 60 180 540
40 120 360 ...
7 21 63
14 42 126
28 84 252

...

取每个表中不超过n的部分分别计算方案数

每个表水平方向最多11列,竖直方向最多17行

由于不同表中选数互不干扰,将每个表的方案数相乘即为最终答案

#include<cstdio>
#define P 1000000001
int n;
long long f[][];
bool hf[];
bool d[];
long long Ans=;
int main(){
f[][]=;
for(int i=;i<;i++)if(!(i&(i>>))&&!(i&(i<<)))hf[i]=;
scanf("%d",&n);
for(int w=;w<=n;w++){
if(d[w])continue;
int pp=,ii=;
long long ans=;
for(int i=w;i<=n;i+=i,ii++){
int a=,b=i;
while(b<=n)d[b]=,b*=,a++;
int pn=<<a;
for(int j=;j<pn;j++){
f[ii][j]=;
for(int k=;k<pp;k++)
if(hf[j]&&hf[k]&&!(j&k))(f[ii][j]+=f[ii-][k])%=P;
}
pp=pn;
}
ii--;
for(int i=;i<pp;i++)(ans+=f[ii][i])%=P;
Ans*=ans;
Ans%=P;
}
printf("%lld",Ans);
return ;
}

bzoj2734 集合选数的更多相关文章

  1. 【BZOJ2734】【HNOI2012】集合选数(状态压缩,动态规划)

    [BZOJ2734][HNOI2012]集合选数(状态压缩,动态规划) 题面 Description <集合论与图论>这门课程有一道作业题,要求同学们求出{1, 2, 3, 4, 5}的所 ...

  2. 【BZOJ-2734】集合选数 状压DP (思路题)

    2734: [HNOI2012]集合选数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1070  Solved: 623[Submit][Statu ...

  3. bzoj2734【HNOI2012】集合选数

    2734: [HNOI2012]集合选数 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 831  Solved: 487 [Submit][Stat ...

  4. 【BZOJ-2732】集合选数 状压DP (思路题)

    2734: [HNOI2012]集合选数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1070  Solved: 623[Submit][Statu ...

  5. bzoj 2734: [HNOI2012]集合选数 状压DP

    2734: [HNOI2012]集合选数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 560  Solved: 321[Submit][Status ...

  6. BZOJ_2734_[HNOI2012]集合选数_构造+状压DP

    BZOJ_2734_[HNOI2012]集合选数_构造+状压DP 题意:<集合论与图论>这门课程有一道作业题,要求同学们求出{1, 2, 3, 4, 5}的所有满足以 下条件的子集:若 x ...

  7. 2734: [HNOI2012]集合选数

    2734: [HNOI2012]集合选数 链接 分析: 转化一下题意. 1 3 9 27... 2 6 18 54... 4 12 36 108... 8 24 72 216... ... 写成这样的 ...

  8. [HNOI2012]集合选数 --- 状压DP

    [HNOI2012]集合选数 题目描述 <集合论与图论>这门课程有一道作业题,要求同学们求出\({1,2,3,4,5}\)的所有满足以 下条件的子集:若 x 在该子集中,则 2x 和 3x ...

  9. 状压DP之集合选数

    题目 [HNOI2012]集合选数 <集合论与图论>这门课程有一道作业题,要求同学们求出{1, 2, 3, 4, 5}的所有满足以 下条件的子集:若 x 在该子集中,则 2x 和 3x 不 ...

随机推荐

  1. Java线程的生命周期

    线程的生命周期包括:新建(New).就绪(Runnable).运行(Running).阻塞(Blocked)和死亡(Dead)5种状态.线程状态转换图如下: 1.新建状态(New) 当程序使用new关 ...

  2. Sobel算子 (转)

    幻灯片1 Sobel算子 幻灯片2 一.Sobel边缘检测算子 l 在讨论边缘算子之前,首先给出一些术语的定义: l (1)边缘:灰度或结构等信息的突变处,边缘是一个区域的结束,也是另一个区域的开始, ...

  3. 弹出层是iframe引入的页面,如果用js进行隐藏呢?

    <script> $(document).ready(function(){ $('.bjfh').click(function(){ parent.document.getElement ...

  4. css selector

    文章一: http://www.jb51.net/css/68287.html 去年我学jQuery的时候,曾经做过一点选择器(selector)的笔记,今天是CSS的选择器,以后还有一部分xPath ...

  5. 百度APIStore

    链接 http://apistore.baidu.com/ 提供了许多免费的api接口,用来做功能性的查询

  6. 【转】beancopy的替代方案

    链接:http://jingyan.baidu.com/article/215817f7d55b871edb14235b.html 最近在项目中接触到了BeanUtils.copyProperties ...

  7. ubuntuPC机安装JLink驱动

    摘要: 打开你仿真用的机器人的配置文化,这个应该是local_costmap_params.yaml transform tolerance g改为1     本文介绍了如何在Ubuntu平台配置J- ...

  8. 工作中遇到的问题--BindException

    org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResu ...

  9. 课堂所讲整理:HTML--7JavaScript的DOM操作

    1.DOM的基本概念 DOM是文档对象模型,这种模型为树模型:文档是指标签文档:对象是指文档中每个元素:模型是指抽象化的东西. 2.Window对象操作 一.属性和方法: 属性(值或者子对象): op ...

  10. 关闭V-Ray warning消息框

    有时候模型使用低版本VR保存的,再次打开模型时会弹出V-Ray warning提示框 这个问题困扰了我一周时间.... 查了VR官方帮助文档 解决方法如下 setVRaySilentMode() -- ...