题目

问有多少个集合 \(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. linux下MariaDB安装

    一条命令安装Mariadb 首先在/etc/yum.repos.d下创建一个MariaDB.repo文件 vim /etc/yum.repos.d/MariaDB.repo 添加以下配置 [maria ...

  2. yolov5项目cuda错误解决

    CUDA报错解决 # 报错详情 AssertionError: CUDA unavailable, invalid device 0 requested 查看cuda版本 先看一下电脑是否支持GPU, ...

  3. Html飞机大战(十二): canvas写字(结束状态的编辑)

    好家伙,基本的功能都做完了,来补充一个结束状态的游戏结束文案   上代码: case END: //给我的画笔设置一个字的样式 //后面写出来的字都是这个样式的 context.font = &quo ...

  4. Java纯手打web服务器(二)

    概要:这里对上一篇中的访问资源进行改进,将访问servlet和静态资源进行区分. 主要不同的地方是加入了两种分析器 servlet分析器 if (request.getUri().startsWith ...

  5. 【Azure API 管理】APIM中证书更新问题

    问题描述 每一年到期更新域名证书,APIM会中断服务,请问如何不中断服务? 问题解答 Azure API 管理允许在受信任的根证书和中间证书存储中的计算机上安装 CA 证书,分配证书的过程可能需要 1 ...

  6. 通过Glide加载不可见的图片

    今天遇到一个需求,需要点击分享的时候生成图片以及二维码. 即:将带有图片以及二维码的布局文件生成Bitmap,当然这个布局文件是后台生成的,并不可见,这时候会发现使用Glide加载图片没有反应. 源码 ...

  7. Java 构造器(构造方法)练习

    1 package com.bytezero.triangle; 2 3 public class TriAngle 4 { 5 //私有属性 6 private double base; //边长 ...

  8. 数据安全刻不容缓,国产智能化厂商首获SOC 2鉴证报告有何意义?

    数据安全刻不容缓,国产智能化厂商首获SOC 2鉴证报告有何意义? 了解SOC 2与ISO 27001的区别,你就知道SOC 2对智能自动化厂商的意义了 文/王吉伟 要问当前组织对于数字化转型的最大顾虑 ...

  9. 借助 Terraform 功能协调部署 CI/CD 流水线-Part 2

    在第一部分的文章中,我们介绍了3个步骤,完成了教程的基础配置: 使用 Terraform 创建 AWS EKS Infra 在 EKS 集群上部署 ArgoCD 及其依赖项 设置 Bitbucket ...

  10. 使用Mockito与Squaretest进行单元测试.

    项目开发过程中,不少公司都要求写单元测试的代码,可以提高代码的质量,并且可以减少出现BUG的概率. 对于中小型公司来说,对单元测试不做硬性要求,不写最好.因为还是需要一定的工作量,在保证代码质量和性能 ...