Description

题目链接

Solution

可以根据条件构造出一个矩阵,

1 3 9 27 81...

2 6 18....

4 12 36...

这个矩阵满足\(G[i][1]=G[i-1][1]*2(1< i),G[i][j]=G[i][j-1]*3(1\leq i,1<j)\)

也就是要满足不能同时选择矩阵中\((G[i][j],G[i][j+1],G[i+1][j])\)

而且会发现,矩阵可能有多个,应枚举矩阵的\(G[1][1]\)并记录下出现过的数

这样会发现矩阵最大长为18,最大宽为11,容易想到状压DP记录一下方案数即可

Code

#include <cstdio>
#include <algorithm>
#include <cstring>
#define N 100010
using namespace std; const int mo=1000000001;
int n,g[20][20],b[20],dp[20][2049],Ans=1;
bool vis[N]; int DP(int x){
memset(b,0,sizeof(b));
memset(g,0x3f,sizeof(g));
memset(dp,0,sizeof(dp));
g[1][1]=x;
for(int i=2;i<=18&&g[i-1][1]*1ll*2<=n;++i) g[i][1]=g[i-1][1]*2;
for(int i=1;i<=18;++i)
for(int j=2;j<=11&&g[i][j-1]*1ll*3<=n;++j)
g[i][j]=g[i][j-1]*3;
for(int i=1;i<=18;++i)
for(int j=1;j<=11;++j)
if(g[i][j]<=n) b[i]|=(1<<(j-1)),vis[g[i][j]]=1;
dp[0][0]=1;
for(int i=0;i<18;++i)
for(int S=0;S<=b[i];++S)
if(dp[i][S])
for(int nxS=0;nxS<=b[i+1];++nxS)
if(((S&nxS)==0)&&((nxS&(nxS>>1))==0))//满足限制
(dp[i+1][nxS]+=dp[i][S])%=mo;
return dp[18][0];
} int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i)
if(!vis[i]) Ans=(Ans*1ll*DP(i))%mo;//乘法原理
printf("%d\n",Ans);
return 0;
}

[BZOJ2734][HNOI2012] 集合选数(状态压缩+思维)的更多相关文章

  1. BZOJ2734 HNOI2012集合选数(状压dp)

    完全想不到的第一步是构造一个矩阵,使得每行构成公比为3的等比数列,每列构成公比为2的等比数列.显然矩阵左上角的数决定了这个矩阵,只要其取遍所有既不被2也不被3整除的数那么所得矩阵的并就是所有的数了,并 ...

  2. 【bzoj2734】集合选数(有点思维的状压dp)

    题目传送门:bzoj2734 这题一个月前看的时候没什么头绪.现在一看,其实超简单. 我们对于每个在$ [1,n] $范围内的,没有因数2和3的数$ d $,将它的倍数$ 2^a 3^b d $一起处 ...

  3. bzoj2734: [HNOI2012]集合选数

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

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

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

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

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

  6. 2734: [HNOI2012]集合选数

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

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

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

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

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

  9. luogu P3226 [HNOI2012]集合选数

    luogu 因为限制关系只和2和3有关,如果把数中2的因子和3的因子都除掉,那剩下的数不同的数是不会相互影响,所以每次考虑剩下的数一样的一类数,答案为每类数答案的乘积 如果选了一个数,那么2的因子多1 ...

随机推荐

  1. [vijos]lxhgww的奇思妙想(长链剖分)

    题意 题目链接 Sol 长链剖分 又是一个用各种花式技巧优化的暴力 它的主要思想是:对于每个节点,把深度最深的子节点当做重儿子,它们之间的边当做重边 这样就会有一些非常好的轻质 所有链长总和是\(O( ...

  2. TP5.0搭建restful API 应用

    1.配置环境变量,如果没配置会显示如下错误. 配置方法 1)右键此电脑-> 属性-> 高级系统设置->环境变量->Path 2)在Path后加上php目录的名称 如:E:\PH ...

  3. 错误Cannot find module 'stylus'

    vue项目中使用stylus预处理器写css语法,老是出现 Cannot find module ‘stylus’ 的错误,鼓捣了很久,包括webstorm中配置stylus的支持,安装依赖. 终于找 ...

  4. 转:解决Arcsde用户锁定的问题

    采用arcgis平台做GIS应用的人,可能偶尔碰到sde用户锁定(Arccatalog 或应用程序异常退出的时比较多)的问题,往往咱们解决的办法是重启sde服务.如果一个服务器上有多个连接时,重启服务 ...

  5. Refactoring in Coding

    Make changes on existing code for subsequent and constant changes of requirement. Reference:http://w ...

  6. StackTrack for debug

    System.Diagnostics.Debug.WriteLine("Serial port. {0},{1}", this.GetType().FullName, new Sy ...

  7. R.java文件无法自动生成的问题

    如果出现R.java文件无法自动生成的问题,同时Console窗口提示下列信息: Android requires compiler compliance level 5.0 or 6.0. Foun ...

  8. Java1.7新特性

    1.switch语句支持字符串变量 public String getTypeOfDayWithSwitchStatement(String dayOfWeekArg) { String typeOf ...

  9. Mahara-16.10 (Ubuntu 16.04)

    平台: Ubuntu 类型: 虚拟机镜像 软件包: mahara-16.10 commercial education elearning mahara open source 服务优惠价: 按服务商 ...

  10. java之Socket传递图片

    客户端: package client; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ...