wwwww比赛的时候题目看错了

假设我们确定的1的位置,那么接下来的每一轮,1都会和一段长度为2的幂的区间里,标号最小的人pk。

把1固定在1位置(求出最终方案数后乘上 2n2n2^n 就是答案),那么就相当于区间 [2,2][2,2][2,2],[3,4][3,4][3,4],[5,8][5,8][5,8]…[2n−1+1,2n][2n−1+1,2n][2^{n-1}+1,2^n] 里的最小值不在给出的集合中

考虑容斥,那么就只要求出标号在集合 SSS 中的区间的最小值在给出的集合中,其他区间随便放的方案数就可以了

把 ai" role="presentation">aiaia_i 从大到小排序,令 fi,Sfi,Sf_{i,S} 表示前 iii 个人,集合 S" role="presentation">SSS 中的区间的最小值在 aaa 中的最小值

因为把 ai" role="presentation">aiaia_i 从大到小排序了,所以每次转移只要算出之前用了多少人,乘个组合数就可以了

#include <cstdio>
#include <iostream>
#include <algorithm>using namespace std;const int N=20,P=1e9+7;int n,m,p,a[N],f[N][1<<16|5],fac[1<<16|5],inv[1<<16|5];inline int C(int x,int y){if(x<y) return 0;return 1LL*fac[x]*inv[y]%P*inv[x-y]%P;
}int pw[N];inline void add(int &x,int y){(x+=y)%=P;
}int main(){freopen("1.in","r",stdin);freopen("1.out","w",stdout);scanf("%d%d",&n,&m);pw[0]=1; for(int i=1;i<=n;i++) pw[i]=pw[i-1]*2; p=pw[n];fac[0]=1; for(int i=1;i<=p;i++) fac[i]=1LL*fac[i-1]*i%P;inv[1]=1; for(int i=2;i<=p;i++) inv[i]=1LL*(P-P/i)*inv[P%i]%P;inv[0]=1; for(int i=1;i<=p;i++) inv[i]=1LL*inv[i]*inv[i-1]%P;for(int i=1;i<=m;i++) scanf("%d",&a[i]);sort(a+1,a+1+m); int ans=0; f[m+1][0]=1;for(int i=m;i;i--){for(int S=0;S<(1<<n);S++) f[i][S]=f[i+1][S];for(int S=0;S<(1<<n);S++){int cnt=0;for(int j=1;j<=n;j++)if(S>>(j-1)&1) cnt+=pw[j-1];int rst=p-a[i]-cnt;for(int j=1;j<=n;j++)if(S>>(j-1)&1);else{if(pw[j-1]-1>rst) continue;add(f[i][S|(1<<j-1)],1LL*f[i+1][S]*C(rst,pw[j-1]-1)%P*fac[pw[j-1]]%P);}}}for(int i=0;i<(1<<n);i++){int cur=f[1][i],cnt=0,tot=0;for(int j=1;j<=n;j++)if((i>>(j-1))&1) cnt+=pw[j-1],tot++;cur=1LL*cur*fac[p-cnt-1]%P;if(tot&1) ans=(ans-cur)%P;else ans=(ans+cur)%P;}ans=1LL*ans*p%P;printf("%d\n",(ans+P)%P);return 0;
}

[容斥 状压DP] Atcoder ARC093 F - Dark Horse相关推荐

  1. [容斥 状压DP] HDU4997. Biconnected

    令 fSf_S 表示点集 SS 的答案,gSg_S 表示点集 SS 的连通图个数 那么 gSg_S 可以通过枚举与编号最小的点联通的点集求出来 fS=gS−∑T∈SgT×MT,S−Tf_S=g_S-\ ...

  2. [容斥 状压DP 树形DP] BZOJ 4455 [Zjoi2016]小星星 UOJ #185 【ZJOI2016】小星星

    杜老师说的哦 据说有人n*3^n卡过去 ? UOJ上需要卡常哦 #include<cstdio> #include<cstdlib> #include<algorithm ...

  3. 『容斥·状压』CF449D Jzzhu and Numbers

    P r o b l e m \mathrm{Problem} Problem 给出一个长度为n的序列 a 1 , a 2 . . . a n a_1,a_2...a_n a1​,a2​...an​. ...

  4. AtCoder Grand Contest 012 E Camel and Oases 状压dp

    Description 有一个容量为V的包,n个接水点,坐标分别为x[] 有两种移动方式: 若两个接水点之间的距离不超过此时包的容量v,那么就可以移动 若此时v不等于0,那么可以使v=v/2(下取整) ...

  5. AtCoder Grand Contest 012 E - Camel and Oases 状压dp

    题意 平面上有n个点.初始有V的权值,每次可以从一个点走到与他距离不超过V的点,当V>0时也可以让V/2且到达任意一个点.问从每个点出发能否遍历所有点. n,V<=200000 分析 显然 ...

  6. 【uoj#37/bzoj3812】[清华集训2014]主旋律 状压dp+容斥原理

    题目描述 求一张有向图的强连通生成子图的数目对 $10^9+7$ 取模的结果. 题解 状压dp+容斥原理 设 $f[i]$ 表示点集 $i$ 强连通生成子图的数目,容易想到使用总方案数 $2^{sum ...

  7. 【PKUWC2018】随机算法【状压dp】【组合计数】

    题意:一张nnn个点mmm条边的无向无权图,求以下算法计算最大独立集的正确率:随机一个排列,依次考虑排列中每一个点,如果不与任何一个独立集中的点相邻则将其加入独立集.模9982443539982443 ...

  8. 【状压DP】【cofun1375】麦田

    [cofun1375]麦田 Description 话说公元199年,曹操准备与袁绍进行官渡决战.为整肃军纪,曹操下令:"全军将士,上至统帅,下至马佚,行军训练,不准践踏庄稼,不准倒犯民利, ...

  9. 【状压DP+高精】【cofun1370】走道铺砖问题

    [cofun1370]走道铺砖问题 Description 有一个专门为装修设计方案的设计师.在某一天,他接到了一个项目,为一栋正在修建的大楼设计走道的地板铺设方案.此项目的委托人事先便进行了说明:地 ...

  10. BZOJ 2560: 串珠子 (状压DP+枚举子集补集+容斥)

    (Noip提高组及以下),有意者请联系Lydsy2012@163.com,仅限教师及家长用户. 2560: 串珠子 Time Limit: 10 Sec Memory Limit: 128 MB Su ...

最新文章

  1. 我收藏的技术知识图(每张都是大图)
  2. 深度学习arm cache系列--一篇就够了
  3. JavaScript获取当前日期时间
  4. 【机器视觉】机器视觉博客汇总
  5. 跳槽失败到月薪50K,AI工程师是这样炼成的!
  6. Andriod UI设计之度量单位说明(DIP,DP,PX,SP)
  7. mysql监控---慢语句查询
  8. JAVA获取CKplayer真是地址_[Java教程]使用CKplayer插件在网页中嵌入视频的方法(常用笔记2)...
  9. python项目源码和注解_python源代码和注释 - 随笔分类 - 秦朗的天空 - 博客园
  10. 寒从足下起 冬季防病先护足
  11. java.lang.NullPointterException:
  12. 前罗辑思维撰稿人李源,首度在喜马拉雅FM解读大英帝国
  13. 服务器如何数据备份?
  14. 【xla】六、【构图阶段】xlaRunOp
  15. JAVA日记之mybatis-3一对一,一对多,多对多xml与注解配置 ----喝最烈的酒.
  16. (附源码)springboot+mysql+采用协同过滤算法的视频推荐系统的设计与实现 毕业设计261620
  17. 【矩阵乘法】JZOJ_5223 B
  18. SVN 用到的几个命令(笔记)
  19. ThinkServer RD640 装系统
  20. 河北省职称计算机模拟考试,河北省职称计算机考试模拟练习系统试题

热门文章

  1. HC32F460 浮点运算开启
  2. Win8.1在关机界面卡住无反应问题的解决
  3. 论文解读:Detach and Adapt: Learning Cross-Domain Disentangled Deep Representation
  4. 几行代码教你爬取LOL皮肤图片
  5. 中小企业网站优化推广思路方法技巧
  6. flutter app使用大量网络图片导致频繁崩溃
  7. ChemDraw怎么激活?ChemDraw激活教程
  8. JetpackCompose Modifier常用属性介绍(1)
  9. CryEngine5 Shader调试
  10. Windows socket之IOCP实例----IOCP开发驾照理论考试系统