[HNOI2012]集合选数 BZOJ2734
分析:
构造法...每次找到一个没有被选过的数,用这个数推出一个表格,之后在表格上跑状压DP,时间复杂度O(n)
附上代码:
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <iostream>
using namespace std;
#define N 25
#define M 1<<11
#define mod 1000000001
int f[N][M],a[N][N],b[N],K,n,m,vis[1000005];
long long ans=1;
int calc(int t)
{
memset(b,0,sizeof(b));
a[1][1]=t;
for(int i=2;i<=18;i++)
{
a[i][1]=a[i-1][1]<<1;
if(a[i][1]>n)a[i][1]=n+1;
}
for(int i=1;i<=18;i++)
{
for(int j=2;j<=11;j++)
{
a[i][j]=a[i][j-1]*3;
if(a[i][j]>n)a[i][j]=n+1;
}
}
for(int i=1;i<=18;i++)
{
for(int j=1;j<=11;j++)
{
if(a[i][j]<=n)
{
b[i]+=(1<<(j-1));
vis[a[i][j]]=1;
}
}
}
for(int i=0;i<=18;i++)
{
for(int S=0;S<=b[i];S++)
{
f[i][S]=0;
}
}
f[0][0]=1;
for(int i=1;i<=18;i++)
{
for(int S=0;S<=b[i-1];S++)
{
if(!f[i-1][S])continue;
for(int s=0;s<=b[i];s++)
{
if((S&s)||(s&(s<<1)))continue;
f[i][s]=(f[i][s]+f[i-1][S])%mod;
}
}
}
return f[18][0];
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
if(!vis[i])
{
ans=(ans*calc(i))%mod;
}
}
printf("%lld\n",ans);
return 0;
}
[HNOI2012]集合选数 BZOJ2734的更多相关文章
- 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 ...
- 2734: [HNOI2012]集合选数
2734: [HNOI2012]集合选数 链接 分析: 转化一下题意. 1 3 9 27... 2 6 18 54... 4 12 36 108... 8 24 72 216... ... 写成这样的 ...
- [HNOI2012]集合选数 --- 状压DP
[HNOI2012]集合选数 题目描述 <集合论与图论>这门课程有一道作业题,要求同学们求出\({1,2,3,4,5}\)的所有满足以 下条件的子集:若 x 在该子集中,则 2x 和 3x ...
- BZOJ2734 HNOI2012集合选数(状压dp)
完全想不到的第一步是构造一个矩阵,使得每行构成公比为3的等比数列,每列构成公比为2的等比数列.显然矩阵左上角的数决定了这个矩阵,只要其取遍所有既不被2也不被3整除的数那么所得矩阵的并就是所有的数了,并 ...
- bzoj2734:[HNOI2012]集合选数(状压DP)
菜菜的喵喵题~ 化序列为矩阵!化腐朽为神奇!左上角为1,往右每次*3,往下每次*2,这样子就把问题转化成了在矩阵里选不相邻的数有几种可能. 举个矩阵的例子 1 3 9 27 2 6 18 54 4 1 ...
- bzoj2734: [HNOI2012]集合选数
Description <集合论与图论>这门课程有一道作业题,要求同学们求出{1, 2, 3, 4, 5}的所有满足以 下条件的子集:若 x 在该子集中,则 2x 和 3x 不能在该子集中 ...
- [BZOJ2734][HNOI2012] 集合选数(状态压缩+思维)
Description 题目链接 Solution 可以根据条件构造出一个矩阵, 1 3 9 27 81... 2 6 18.... 4 12 36... 这个矩阵满足\(G[i][1]=G[i-1] ...
- 2734: [HNOI2012]集合选数 - BZOJ
Description <集合论与图论>这门课程有一道作业题,要求同学们求出{1, 2, 3, 4, 5}的所有满足以 下条件的子集:若 x 在该子集中,则 2x 和 3x 不能在该子集中 ...
随机推荐
- 【代码笔记】iOS-NSSearchPathForDirectoriesInDomainsDemo
一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, ...
- js 从URL上获取参数
//获取匹配的 function getUrlParam(name) { var reg = new RegExp("(^|&)" + ...
- Python笔记(五):异常处理和数据存储
注:和上一篇有关联 (一) finally 和 输出异常信息 try: the_man = open(r'C:\Users\123456\Desktop\test.txt') ...
- 【Python】定时调度
from datetime import datetime from apscheduler.schedulers.blocking import BlockingScheduler def tick ...
- CAC的Debian-8-64bit安装BBR正确打开方式
装过三台debian 64 bit, CAC, 2欧, KVM虚拟机 做法都一样---下面说下正确安装方式 0. 有装锐速记得先删除,免得换核心后,锐速在扯后腿. 1.换4.9版kernel ...
- 使用mysqldump备份时为什么要加上 -q 参数(5.7默认为on)
使用mysqldump备份时为什么要加上 -q 参数(5.7默认为on) 写在前面:我们在使用mysqldump备份数据时,请一定记住要加上 -q 参数,后果可能是很严重的,不要给自己挖坑哦. 先来看 ...
- Python通过LDAP验证、查找用户(class,logging)
定义一个类,用于初始化ldap连接,验证.查找用户等功能 # -*- coding: UTF-8 -*- import sys reload(sys) sys.setdefaultencoding(' ...
- Mybatis 学习笔记
可学习渠道 MYBATIS 入门教程 1. Mybatis 介绍 Mybatis 是 sqlmap 技术,对 JDBC 进行封装,将大量的 SQL 语句外部化. 平时我们都用JDBC访问数据库,除了 ...
- Python实例--12306的抢票功能
基础知识学习 目标: 通过python程序实现自动登录下单功能 知识点: Selenium + 云打码 + Python 学习链接: 1. Python学习--Selenium模块 2. Python ...
- Coursera-AndrewNg(吴恩达)机器学习笔记——第三周编程作业(逻辑回归)
一. 逻辑回归 1.背景:使用逻辑回归预测学生是否会被大学录取. 2.首先对数据进行可视化,代码如下: pos = find(y==); %找到通过学生的序号向量 neg = find(y==); % ...