bzoj 2734 [HNOI2012]集合选数 状压DP+预处理
这道题很神啊……
神爆了……
思路大家应该看别的博客已经知道了,但大部分用的插头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+预处理的更多相关文章
- bzoj 2734: [HNOI2012]集合选数 状压DP
2734: [HNOI2012]集合选数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 560 Solved: 321[Submit][Status ...
- BZOJ 2734 [HNOI2012]集合选数 (状压DP、时间复杂度分析)
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2734 题解 嗯早就想写的题,昨天因为某些不可告人的原因(大雾)把这题写了,今天再来写题解 ...
- [HNOI2012]集合选数 --- 状压DP
[HNOI2012]集合选数 题目描述 <集合论与图论>这门课程有一道作业题,要求同学们求出\({1,2,3,4,5}\)的所有满足以 下条件的子集:若 x 在该子集中,则 2x 和 3x ...
- 洛谷$P3226\ [HNOI2012]$集合选数 状压$dp$
正解:$dp$ 解题报告: 传送门$QwQ$ 考虑列一个横坐标为比值为2的等比数列,纵坐标为比值为3的等比数列的表格.发现每个数要选就等价于它的上下左右不能选. 于是就是个状压$dp$板子了$QwQ$ ...
- $HNOI2012\ $ 集合选数 状压$dp$
\(Des\) 求对于正整数\(n\leq 1e5\),{\(1,2,3,...,n\)}的满足约束条件:"若\(x\)在该子集中,则\(2x\)和\(3x\)不在该子集中."的子 ...
- 【BZOJ-2732】集合选数 状压DP (思路题)
2734: [HNOI2012]集合选数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1070 Solved: 623[Submit][Statu ...
- 【BZOJ-2734】集合选数 状压DP (思路题)
2734: [HNOI2012]集合选数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1070 Solved: 623[Submit][Statu ...
- BZOJ 2734: [HNOI2012]集合选数 [DP 状压 转化]
传送门 题意:对于任意一个正整数 n≤100000,如何求出{1, 2,..., n} 的满足若 x 在该子集中,则 2x 和 3x 不能在该子集中的子集的个数(只需输出对 1,000,000,001 ...
- bzoj 2734: [HNOI2012]集合选数
题目描述 <集合论与图论>这门课程有一道作业题,要求同学们求出{1, 2, 3, 4, 5}的所有满足以 下条件的子集:若 x 在该子集中,则 2x 和 3x 不能在该子集中. 同学们不喜 ...
随机推荐
- Redis 配置文件 Redis.conf 参数说明
Redis 配置文件 Redis.conf 参数说明 参数名 参数说明 参数实例 daemonize 是否以后台守护进程运行,默认为 no, 取值 yes, no daemonize no ...
- Ps切图学习
1.切图的原文件格式为psd,用ps工具打开 2.鼠标点击需要切的图片,会自动选中图层: 3.选择需要切图的图层,右键复制图层 宽高必须为2的倍数 文件-存储为web和设备所用格式 预设选择为png- ...
- cocos2d-x NotificationCenter
转自:http://www.xinze.me/cocos2d-x-ccnotificationcenter/ 在前端开发中,JS和as3中都有很好的监听机制, 我们使用Event的addEventLi ...
- C#_delegate和事件 - 如果金额小于0则触发事件
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- visual studio 2013 有效序列号
还没试过,可以参考下! visual studio 2013 有效序列号: BWG7X-J98B3-W34RT-33B3R-JVYW9
- 根据ip地址从第三方接口获取详细的地理位置
最近项目某个功能需要根据ip地址从第三方接口获取详细的地理位置,从网上找了很多例子,主要接口有新浪的,淘宝的,腾讯的.试了淘宝的,如果是数量级小的还可以,如果数量级达到上十万级就速度慢了,会导致系统崩 ...
- 将WSDL文件生成的Java文件
- windows下回车与换行符
windows下回车与换行符 从键盘输入的数据一般是ASCII码,也就是文本文件,在送到计算机内存时,回车和换行符转换成一个换行符(也就是说回车和换行符在windows文本中是两个字符),再从内存中以 ...
- jqgrid项目使用记录/注释版/未整理/
jqgrid项目使用笔记function loadActData(){ $("#actGridTable").clearGridData();//首先清空表格内容 var url ...
- 读jQuery官方文档:数据方法与辅助方法
数据方法 有时候你可能想要在元素上面储存数据.由于浏览器兼容性问题,用原生JavaScript处理元素上的数据可能会造成内存溢出,jQuery可以帮你自动处理这些问题: //储存和取出元素数据 $(' ...