题目

问有多少个集合 \(S\) 是 \([1,n]\) 的子集,

并且 \(\forall a,b\in S,a|b\),满足 \(\frac{b}{a}\neq \{2,3\}\)


分析

可以发现这样所谓的独立集,不满足的关系近似于 若干个网格图 ,即

1 3 9 ...
2 6 18 ...
4 12 36 ...
... ... ... ...

也就是相邻的不能选,可以发现直接状压dp就可以了,

然后表格左上角以 \(6i+1\) 和 \(6i+5\) 数开始即可


代码

#include <cstdio>
#include <cstring>
using namespace std;
const int N=2101,mod=1000000001;
int a[18][11],l[18],f[N],dp[N],n,al,two[18],tot[18],TOT,rk[N],b[N],ans=1;
int mo(int x,int y){return x+y>=mod?x+y-mod:x+y;}
int answ(int m){
if (n/m<3) return n/m+1;
int k=1,ans=0; a[1][l[k]=1]=m;
while (1){
while (a[k][l[k]]*3<=n) ++l[k],a[k][l[k]]=a[k][l[k]-1]*3;
if (a[k][1]*2<=n) l[++k]=1,a[k][1]=a[k-1][1]*2;
else break;
}
memset(dp,0,sizeof(dp)),
memset(f,0,sizeof(f)),
l[0]=l[1],dp[1]=1;
for (int i=1;i<=k;++i){
int now=0;
for (int j=l[i];j<l[i-1];++j) now|=two[j];
for (int j=1;j<=tot[l[i-1]];++j){
int t0=rk[b[j]&(al^1)],t1=rk[b[j]|1];
if (!(b[j]&1)) f[j]=mo(dp[t0],dp[t1]);
else if (!(now&1)) f[j]=dp[t0];
else f[j]=0;
}
memcpy(dp,f,(tot[l[i-1]]+1)<<2);
for (int o=1;o<l[i-1];++o){
for (int j=1;j<=tot[l[i-1]];++j){
int t0=rk[b[j]&(al^two[o])],t1=rk[b[j]|two[o]];
if (!((b[j]>>o)&1)) f[j]=mo(dp[t0],dp[t1]);
else if (!((b[j]>>(o-1))&1)&&!(now&1)) f[j]=dp[t0];
else f[j]=0;
}
memcpy(dp,f,(tot[l[i-1]]+1)<<2);
}
}
for (int i=1;i<=tot[l[k]];++i) ans=mo(ans,dp[i]);
return ans;
}
int main(){
scanf("%d",&n),two[0]=rk[0]=TOT=1,al=2047;
for (int i=1;i<12;++i) two[i]=two[i-1]<<1;
for (int j=1;j<12;++j){
for (int i=two[j-1];i<two[j];++i){
int now=i&(i<<1);
if (!(now&(now-1))) b[++TOT]=i,rk[i]=TOT;
}
tot[j]=TOT;
}
for (int i=0;i<=n;++i){
if (6*i+1<=n) ans=1ll*ans*answ(6*i+1)%mod;
else break;
if (6*i+5<=n) ans=1ll*ans*answ(6*i+5)%mod;
else break;
}
return !printf("%d",ans);
}

#轮廓线dp,模型转换#洛谷 3226 [HNOI2012]集合选数的更多相关文章

  1. BZOJ 2734 洛谷 3226 [HNOI2012]集合选数【状压DP】【思维题】

    [题解] 思维题,看了别人的博客才会写. 写出这样的矩阵: 1,3,9,... 2,6,18,... 4,12.36,... 8,24,72,... 我们要做的就是从矩阵中选出一些数字,但是不能选相邻 ...

  2. 洛谷$P3226\ [HNOI2012]$集合选数 状压$dp$

    正解:$dp$ 解题报告: 传送门$QwQ$ 考虑列一个横坐标为比值为2的等比数列,纵坐标为比值为3的等比数列的表格.发现每个数要选就等价于它的上下左右不能选. 于是就是个状压$dp$板子了$QwQ$ ...

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

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

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

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

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

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

  6. 2734: [HNOI2012]集合选数

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

  7. 【BZOJ】2734: [HNOI2012]集合选数

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2734 考虑$N=4$的情况: \begin{bmatrix} 1&3 &X ...

  8. bzoj 2734 [HNOI2012]集合选数 状压DP+预处理

    这道题很神啊…… 神爆了…… 思路大家应该看别的博客已经知道了,但大部分用的插头DP.我加了预处理,没用插头DP,一行一行来,速度还挺快. #include <cstdio> #inclu ...

  9. BZOJ 2734: [HNOI2012]集合选数 [DP 状压 转化]

    传送门 题意:对于任意一个正整数 n≤100000,如何求出{1, 2,..., n} 的满足若 x 在该子集中,则 2x 和 3x 不能在该子集中的子集的个数(只需输出对 1,000,000,001 ...

  10. [HNOI2012]集合选数(状压DP+构造)

    题目要求若出现x,则不能出现2x,3x 所以我们考虑构造一个矩阵 \(1\ 2\ 4 \ 8--\) \(3\ 6\ 12\ 24--\) \(9\ 18\ 36--\) \(--\) 不难发现,对于 ...

随机推荐

  1. django学习第五天---model类的属性参数,单表ORM数据库增删改查动作,查询的13个API接口

    model类的属性参数 比如:models.CharField(null=True,blank=True) (1)null 如果为True,Django将用NULL在数据库中存储空值.默认值时Fals ...

  2. hibernate-delete(Entity)的顺序问题

    hibernate为我们提供了删除直接根据实体参数删除数据的方法: HibernateTemplate().delete(entity); public void delete(final Objec ...

  3. CentOS6.8下yum安装Nginx

    在/etc/yum.repos.d/目录下创建一个源配置文件nginx.repo: cd /etc/yum.repos.d/ vim nginx.repo 填写如下内容: [nginx] name=n ...

  4. 【Azure 环境】使用 az ad group create 时候遇见 Insufficient privileges to complete the operation

    问题描述 使用China Azure,通过Azure CLI 创建AAD组报错,提示权限不足 Insufficient privileges to complete the operation # 使 ...

  5. 【Azure 云服务】Azure Cloud Service中的错误事件 Error Event(Defrag/Perflib) 解答

    问题描述 在Azure Cloud Service的实例中,收集到各种 Error Event 内容,本文针对所收集的三种Event进行解析. 1: This operation is not sup ...

  6. Java 异常整合练习

    1 package com.bytezero.throwable2; 2 3 /** 4 * 5 * @Description 异常练习 6 * @author Bytezero·zhenglei! ...

  7. Java 重写引入

    1 package com.bytezero.override; 2 /* 3 * 方法的重新(override/overwrite) 4 * 5 * 1.重写:子类继承父类以后,可以对父类中同名同参 ...

  8. Codeforces Round 829 (Div. 1)A1. Make Nonzero Sum (easy version)(思维找规律)

    先考虑无解的情况:当n为奇数时无解 相邻的两个元素一定可以变成0 \[a[i] != a[i + 1]时, 分成[i, i], 和[i + 1, i + 1] \] \[a[i] = a[i + 1] ...

  9. Module not specified-使用IDEA出现问题

    一.问题由来 使用IDE导入一个项目时,准备启动这个项目,然后突然报错,错误信息如标题中所示Module not specified.这个项目之前都还好好的 怎么突然就运行不了了呢?让我感到很是疑惑, ...

  10. InputRegZen.vue 正则Input 限制输入框输入内容

    核心内容 已经 perfect,没有用外库,原生完成 用的 iview的Input组件 封装 // InputRegZen.vue <template> <div> <I ...