#轮廓线dp,模型转换#洛谷 3226 [HNOI2012]集合选数
题目
问有多少个集合 \(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]集合选数的更多相关文章
- BZOJ 2734 洛谷 3226 [HNOI2012]集合选数【状压DP】【思维题】
[题解] 思维题,看了别人的博客才会写. 写出这样的矩阵: 1,3,9,... 2,6,18,... 4,12.36,... 8,24,72,... 我们要做的就是从矩阵中选出一些数字,但是不能选相邻 ...
- 洛谷$P3226\ [HNOI2012]$集合选数 状压$dp$
正解:$dp$ 解题报告: 传送门$QwQ$ 考虑列一个横坐标为比值为2的等比数列,纵坐标为比值为3的等比数列的表格.发现每个数要选就等价于它的上下左右不能选. 于是就是个状压$dp$板子了$QwQ$ ...
- bzoj 2734: [HNOI2012]集合选数 状压DP
2734: [HNOI2012]集合选数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 560 Solved: 321[Submit][Status ...
- BZOJ_2734_[HNOI2012]集合选数_构造+状压DP
BZOJ_2734_[HNOI2012]集合选数_构造+状压DP 题意:<集合论与图论>这门课程有一道作业题,要求同学们求出{1, 2, 3, 4, 5}的所有满足以 下条件的子集:若 x ...
- [HNOI2012]集合选数 --- 状压DP
[HNOI2012]集合选数 题目描述 <集合论与图论>这门课程有一道作业题,要求同学们求出\({1,2,3,4,5}\)的所有满足以 下条件的子集:若 x 在该子集中,则 2x 和 3x ...
- 2734: [HNOI2012]集合选数
2734: [HNOI2012]集合选数 链接 分析: 转化一下题意. 1 3 9 27... 2 6 18 54... 4 12 36 108... 8 24 72 216... ... 写成这样的 ...
- 【BZOJ】2734: [HNOI2012]集合选数
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2734 考虑$N=4$的情况: \begin{bmatrix} 1&3 &X ...
- bzoj 2734 [HNOI2012]集合选数 状压DP+预处理
这道题很神啊…… 神爆了…… 思路大家应该看别的博客已经知道了,但大部分用的插头DP.我加了预处理,没用插头DP,一行一行来,速度还挺快. #include <cstdio> #inclu ...
- BZOJ 2734: [HNOI2012]集合选数 [DP 状压 转化]
传送门 题意:对于任意一个正整数 n≤100000,如何求出{1, 2,..., n} 的满足若 x 在该子集中,则 2x 和 3x 不能在该子集中的子集的个数(只需输出对 1,000,000,001 ...
- [HNOI2012]集合选数(状压DP+构造)
题目要求若出现x,则不能出现2x,3x 所以我们考虑构造一个矩阵 \(1\ 2\ 4 \ 8--\) \(3\ 6\ 12\ 24--\) \(9\ 18\ 36--\) \(--\) 不难发现,对于 ...
随机推荐
- 国内无法下载k8s镜像的解决办法
关于通过各种方法下载k8s相关镜像的方法总结如下: 1.使用Azure中国镜像站,目前限制只能"Azure China IP"可用,不再对外提供服务,此路不通. 2.直接使用mir ...
- 矩池云 | GPU 分布式使用教程之 Pytorch
GPU 分布式使用教程之 Pytorch Pytorch 官方推荐使用 DistributedDataParallel(DDP) 模块来实现单机多卡和多机多卡分布式计算.DDP 模块涉及了一些新概念, ...
- 通过Glide加载不可见的图片
今天遇到一个需求,需要点击分享的时候生成图片以及二维码. 即:将带有图片以及二维码的布局文件生成Bitmap,当然这个布局文件是后台生成的,并不可见,这时候会发现使用Glide加载图片没有反应. 源码 ...
- Java 多态 解释+案例
1 package com.bytezreo.duotai; 2 /** 3 * 4 * @Description 面向对象的特征三 ------多态性 5 * @author Bytezero·zh ...
- 万字博文让我们携手一起走进bs4的世界【python Beautifulsoup】bs4入门 find()与find_all()
目录 Beautiful Soup BeautifulSoup类的基本元素 1.Tag的name 2.Tag的attrs(属性) 3.Tag的NavigableString 二.遍历文档树 下行遍历 ...
- Zabbix“专家坐诊”第190期问答汇总
问题一 Q:请问为啥用拓扑图监控交换机接口流量,获取不到数据,显示未知,键值也没错 ,最新数据也能看到,是什么原因呢? A:把第一个值改成主机名. 问题二 Q:请问下zabbix server 有什么 ...
- 从0开始搭建开发环境 -实现servlet原生开发
开发环境: JDK1.8 + Servlet + Mysql 搭建项目 项目搭建参考博客 https://www.cnblogs.com/oyww-2027/p/15347137.html File ...
- Failed to execute goal on project WebBackend: Could not resolve dependencies for project com.lang.yi:WebBackend:jar:1.0.0
一.问题由来 自己在搭建项目的时候报一个错误,如标题所示,具体错误信息如下: Failed to execute goal on project WebBackend: Could not resol ...
- 利用Nginx正向代理实现局域网电脑访问外网
引言 在网络环境中,有时候我们需要让局域网内的电脑访问外网,但是由于网络策略或其他原因,直接访问外网是不可行的.这时候,可以借助 Nginx 来搭建一个正向代理服务器,实现局域网内电脑通过 Nginx ...
- vite启动dev的项目,在nginx做代理的时候,二级目录尾要加/
vite启动dev的项目,在nginx做代理的时候,二级目录尾要加/ vite dev开发启动的时候, url最后不加/,系统不能使用,所以代理的时候,没加/,代理跳转过去,就回导致页面加载不出来,j ...