bzoj 2734 集合悬殊 (状压dp)
大意: 给定$n$, 求集合{1,2,...n}的子集数, 满足若$x$在子集内, 则$2x,3x$不在子集内.
记$f(x)$为$x$除去所有因子2,3后的数, 那么对于所有$f$值相同的数可以划分为一个等价类, 对2的倍数和3的倍数建一个二维的表, 在表上做状压$dp$即可. 最后答案就为每个等价类方案的乘积.
- #include <iostream>
- #include <string.h>
- #define REP(i,a,n) for(int i=a;i<=n;++i)
- using namespace std;
- typedef long long ll;
- const int P = 1e9+1;
- const int N = 1e5+10;
- int n, vis[N];
- int a[30], s[1<<11];
- int dp[2][1<<11];
- int calc(int x) {
- memset(dp,0,sizeof dp);
- memset(a,0,sizeof a);
- int dx = 0, dy = 0;
- for (int i=1,t=x; t<=n; t*=2,++i) {
- for (int j=1,tt=t; tt<=n; tt*=3,++j) {
- (a[i]<<=1)|=1, vis[tt] = 1;
- dx = max(dx, i);
- dy = max(dy, j);
- }
- }
- int mx = (1<<dy)-1, cnt = 0;
- REP(i,0,mx) if (!(i&i<<1)) s[++cnt] = i;
- int cur = 0;
- dp[cur][1] = 1;
- REP(i,1,dx) {
- cur ^= 1;
- memset(dp[cur],0,sizeof dp[cur]);
- REP(j,1,cnt) if (dp[!cur][j]) {
- REP(k,1,cnt) if (!(s[j]&s[k])&&(s[k]|a[i])==a[i]) {
- dp[cur][k]=(dp[cur][k]+dp[!cur][j])%P;
- }
- }
- }
- int ans = 0;
- REP(i,1,cnt) ans=(ans+dp[cur][i])%P;
- return ans;
- }
- int main() {
- scanf("%d", &n);
- int ans = 1;
- REP(i,1,n) if (!vis[i]) ans=(ll)ans*calc(i)%P;
- printf("%d\n", ans);
- }
bzoj 2734 集合悬殊 (状压dp)的更多相关文章
- BZOJ 2560: 串珠子 (状压DP+枚举子集补集+容斥)
(Noip提高组及以下),有意者请联系Lydsy2012@163.com,仅限教师及家长用户. 2560: 串珠子 Time Limit: 10 Sec Memory Limit: 128 MB Su ...
- BZOJ 1087 题解【状压DP】
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3112 Solved: 1816[Submit][ ...
- BZOJ 4000: [TJOI2015]棋盘( 状压dp + 矩阵快速幂 )
状压dp, 然后转移都是一样的, 矩阵乘法+快速幂就行啦. O(logN*2^(3m)) ------------------------------------------------------- ...
- BZOJ 4057: [Cerc2012]Kingdoms( 状压dp )
状压dp.... 我已开始用递归结果就 TLE 了... 不科学啊...我dp基本上都是用递归的..我只好改成递推 , 刷表法 将全部公司用二进制表示 , 压成一个数 . 0 表示破产 , 1 表示没 ...
- BZOJ 2073: [POI2004]PRZ( 状压dp )
早上这道题没调完就去玩NOI网络同步赛了.... 状压dp , dp( s ) 表示 s 状态下所用的最短时间 , 转移就直接暴力枚举子集 . 可以先预处理出每个状态下的重量和时间的信息 . 复杂度是 ...
- bzoj 2669 题解(状压dp+搜索+容斥原理)
这题太难了...看了30篇题解才整明白到底咋回事... 核心思想:状压dp+搜索+容斥 首先我们分析一下,对于一个4*7的棋盘,低点的个数至多只有8个(可以数一数) 这样的话,我们可以进行一个状压,把 ...
- BZOJ 2004 公交线路(状压DP+矩阵快速幂)
注意到每个路线相邻车站的距离不超过K,也就是说我们可以对连续K个车站的状态进行状压. 然后状压DP一下,用矩阵快速幂加速运算即可. #include <stdio.h> #include ...
- BZOJ 1226 学校食堂(状压DP)
状压DP f(i,j,k)表示前i−1个人已经吃了饭,且在i之后的状态为j的人也吃了饭(用二进制表示后面的状态),最后吃的那个人是i之后的第k个 (注意k可以是负数) 然后 如果j&1=1那么 ...
- bzoj 1556 墓地秘密 —— 状压DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1556 预处理出两个障碍四个方向之间的距离(转弯次数),就可以状压DP了: 但预处理很麻烦.. ...
随机推荐
- PHP 之验证码类封装
一.效果图 二.类代码 <?php /** * Created by PhpStorm. * User: Yang * Date: 2019/8/13 * Time: 10:51 */ clas ...
- Wondershare Video Converter Ultimate 注册码 License
这个软件可以直接将DVD iso转换成mp4播放,可以破解,还不错,特地记录 官网下载最新版: https://videoconverter.wondershare.com/gl/video-conv ...
- 营销H5项目-BugList+解决方案+方法
作者会持续更新,后续会整合SF.gg上 其他小伙伴整理的资料 动态改变微信title var $body = $('body'); document.title = '五班老同学(35)'; var ...
- puppeteer爬虫服务
爬虫文件 baidu.js const puppeteer = require("puppeteer"); const path = require('path'); const ...
- Flutter移动电商实战 --(20)首页上拉加载更多功能的制作
这节课学习一下上拉加载效果,其实现在上拉加载的插件有很多,但是还没有一个插件可以说完全一枝独秀,我也找了一个插件,这个插件的优点就是服务比较好,作者能及时回答大家的问题.我觉的选插件也是选人,人对了, ...
- Flutter移动电商实战 --(18)首页_火爆专区商品接口制作
1.获取接口的方法 在service/service_method.dart里制作方法.我们先不接收参数,先把接口调通. Future getHomePageBeloConten() async{ t ...
- mysql 远程登陆
1.查询mysql是否启动 netstat -lnp|grep 3306 ps -df |grep mysqld 2.通过TCPIP的方式测试连接 mysql -uqingjiao -padm ...
- (八)爬虫之js调试(登陆知乎)
上次爬取网易云音乐,折腾js调试了好久,难受....今天继续练练手,研究下知乎登陆,让痛苦更猛烈些. 1.简单分析 很容易就发现登陆的url=“https://www.zhihu.com/api/v3 ...
- 常见Web攻击及解决方案
DoS和DDoS攻击 DoS(Denial of Service),即拒绝服务,造成远程服务器拒绝服务的行为被称为DoS攻击.其目的是使计算机或网络无法提供正常的服务.最常见的DoS攻击有计算机网络带 ...
- windows 10中的ubuntu子系统安装桌面环境的方法
windows 10中的ubuntu子系统安装桌面环境的方法 (How to install Ubuntu-desktop in windows 10 Subsystem for Linux) 转载 ...