这道题很神啊……

神爆了……

思路大家应该看别的博客已经知道了,但大部分用的插头DP。我加了预处理,没用插头DP,一行一行来,速度还挺快。

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <cmath>
#define N 100100
#define M 50
#define yu 1000000001
#define inf 1<<29
using namespace std;
int n;
long long ans=;
long long f[][N/M]={};
int keneng[N/M],kenengnum;
int sushu[N],sushunum; void make_sushu(int limit) // 这里不是筛素数,而是把不是2,3的倍数的筛出来
{ // 如果筛素数,25不是素数,但是5的矩阵不能包含25
int i,j,k;
int vis[N]={};
sushunum=;
for (i=;i<=limit;i++)
if (i%!=&&i%!=)
sushu[++sushunum]=i;
} bool shifou(int now) // 预处理的判断,判断是否有两个1相连
{ // 即是否取连续的两个数
int i,j,k;
i=now&; now>>=;
while (now!=)
{
j=now&;
if (i==j&&i&&j)
return false;
i=j;
now>>=;
}
return true;
} void chuli(int limit) //预处理,把可以选的状态存起来,省时间
{
int i,j,k;
int maxn=;
kenengnum=;
for (i=;i<=limit;i++)
maxn*=;
for (i=;i<maxn;i++)
{
if (shifou(i))
{
keneng[kenengnum++]=i;
}
}
} int pd_long(int x) // 由于矩阵每一行长度不同,所以预处理某些不能用
{ // 这个判断每一行长度
int i=,zanshi=;
while (i<=x)
{
zanshi++;
i*=;
}
return zanshi;
} long long make_juzhen(int now)
{
int i,j,k,x=,y,z;
int limit,lnow,lnowbefore=inf;
limit=pd_long(n/now);
chuli(limit);
f[][]=;
for (i=;x*now<=n;i++,x*=)
{
memset(f[i%],,sizeof(f[i%]));
lnow=pd_long(n/now/x); // 当前行的长度
for (j=;j<kenengnum;j++)
{
if (keneng[j]>>lnow>) //如果有选超过当前行长度的,不选
{
f[i%][j]=;
continue;
}
for (k=;k<kenengnum;k++) // 和上一行比较,是否有相连的1选了
{
if (keneng[k]>>lnowbefore>) // 上一行状态不能超过上一行长度
continue;
if (keneng[j]&keneng[k])
continue;
f[i%][j]+=f[(i+)%][k];
f[i%][j]%=yu;
}
}
lnowbefore=lnow; // 上一行长度
}
return (f[(i+)%][]+f[(i+)%][])%yu; //最后一行一定只有一个,答案只有这两种情况加起来,最后一个选或不选
} int main()
{
int i,j,k,x,y,z;
cin>>n;
make_sushu(n);
for (i=;i<=sushunum;i++)
{
ans*=make_juzhen(sushu[i]);
ans%=yu;
}
cout<<ans<<endl;
}

bzoj 2734 [HNOI2012]集合选数 状压DP+预处理的更多相关文章

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

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

  2. BZOJ 2734 [HNOI2012]集合选数 (状压DP、时间复杂度分析)

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2734 题解 嗯早就想写的题,昨天因为某些不可告人的原因(大雾)把这题写了,今天再来写题解 ...

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

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

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

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

  5. $HNOI2012\ $ 集合选数 状压$dp$

    \(Des\) 求对于正整数\(n\leq 1e5\),{\(1,2,3,...,n\)}的满足约束条件:"若\(x\)在该子集中,则\(2x\)和\(3x\)不在该子集中."的子 ...

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

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

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

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

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

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

  9. bzoj 2734: [HNOI2012]集合选数

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

随机推荐

  1. Redis 配置文件 Redis.conf 参数说明

    Redis 配置文件 Redis.conf 参数说明 参数名 参数说明 参数实例 daemonize 是否以后台守护进程运行,默认为 no, 取值 yes, no   daemonize no     ...

  2. Ps切图学习

    1.切图的原文件格式为psd,用ps工具打开 2.鼠标点击需要切的图片,会自动选中图层: 3.选择需要切图的图层,右键复制图层 宽高必须为2的倍数 文件-存储为web和设备所用格式 预设选择为png- ...

  3. cocos2d-x NotificationCenter

    转自:http://www.xinze.me/cocos2d-x-ccnotificationcenter/ 在前端开发中,JS和as3中都有很好的监听机制, 我们使用Event的addEventLi ...

  4. C#_delegate和事件 - 如果金额小于0则触发事件

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. visual studio 2013 有效序列号

    还没试过,可以参考下! visual studio 2013 有效序列号: BWG7X-J98B3-W34RT-33B3R-JVYW9

  6. 根据ip地址从第三方接口获取详细的地理位置

    最近项目某个功能需要根据ip地址从第三方接口获取详细的地理位置,从网上找了很多例子,主要接口有新浪的,淘宝的,腾讯的.试了淘宝的,如果是数量级小的还可以,如果数量级达到上十万级就速度慢了,会导致系统崩 ...

  7. 将WSDL文件生成的Java文件

  8. windows下回车与换行符

    windows下回车与换行符 从键盘输入的数据一般是ASCII码,也就是文本文件,在送到计算机内存时,回车和换行符转换成一个换行符(也就是说回车和换行符在windows文本中是两个字符),再从内存中以 ...

  9. jqgrid项目使用记录/注释版/未整理/

    jqgrid项目使用笔记function loadActData(){ $("#actGridTable").clearGridData();//首先清空表格内容 var url ...

  10. 读jQuery官方文档:数据方法与辅助方法

    数据方法 有时候你可能想要在元素上面储存数据.由于浏览器兼容性问题,用原生JavaScript处理元素上的数据可能会造成内存溢出,jQuery可以帮你自动处理这些问题: //储存和取出元素数据 $(' ...