JZOJ 5230. 【NOIP2017模拟A组模拟8.5】队伍统计
5230. 【NOIP2017模拟A组模拟8.5】队伍统计
(File IO): input:count.in output:count.out 
Time Limits: 1500 ms  Memory Limits: 524288 KB  Detailed Limits
Description
现在有n个人要排成一列,编号为1->n 。但由于一些不明原因的关系,人与人之间可能存在一些矛盾关系,具体有m条矛盾关系(u,v),表示编号为u的人想要排在编号为v的人前面。要使得队伍和谐,最多不能违背k条矛盾关系(即不能有超过k条矛盾关系(u,v),满足最后v排在了u前面)。问有多少合法的排列。答案对10^9+7取模。
Input
输入文件名为count.in。 
第一行包括三个整数n,m,k。 
接下来m行,每行两个整数u,v,描述一个矛盾关系(u,v)。 
保证不存在两对矛盾关系(u,v),(x,y),使得u=x且v=y 。
Output
输出文件名为count.out。 
输出包括一行表示合法的排列数。
Sample Input
输入1: 
4 2 1 
1 3 
4 2
输入2: 
10 12 3 
2 6 
6 10 
1 7 
4 1 
6 1 
2 4 
7 6 
1 4 
10 4 
10 9 
5 9 
8 10
Sample Output
输出1: 
18
输出2: 
123120
Data Constraint
对于30%的数据,n<=10 
对于60%的数据,n<=15 
对应100%的数据,n,k<=20,m<=n*(n-1),保证矛盾关系不重复。
题解
状压dp 
用f[s][i]表示选人情况为s时,违反了i个矛盾关系 
这样复杂度是O(2nn2k),有点高
加个优化 
因为矛盾关系不重复,用a[i]表示log2(i)的矛盾关系 
这样就去掉了一个n 
最终复杂度是O(2nnk)
代码
#include<cstdio>
#include<cmath>
#define lowbit(a) ((a)&-(a))
#define mo 1000000007
#define N 30
long long f[1<<20][N];
long a[1<<20];
int main()
{   long n,m,l,x,y,s,i,j,k,q;
    long long num;
    freopen("count.in","r",stdin);
    freopen("count.out","w",stdout);
    scanf("%ld%ld%ld",&n,&m,&l);
    for(i=1;i<=m;i++){
        scanf("%ld%ld",&x,&y);
        a[1<<(x-1)]|=1<<(y-1);
    }
    f[0][0]=1;
    for(s=0;s<(1<<n);s++)
        for(i=0;i<=l;i++)if(f[s][i])
            for(q=s^((1<<n)-1);q;q^=lowbit(q)){
                num=0;
                for(k=s&a[lowbit(q)];k;k^=lowbit(k))
                    num++;
                if(i+num<=l)
                    f[s|lowbit(q)][i+num]+=f[s][i];
            }
    num=0;
    for(i=0;i<=l;i++)
        num=(num+f[(1<<n)-1][i])%mo;
    printf("%lld\n",num%mo);
    return 0;
}												
											JZOJ 5230. 【NOIP2017模拟A组模拟8.5】队伍统计的更多相关文章
- JZOJ 【NOIP2017提高A组模拟9.14】捕老鼠
		
JZOJ [NOIP2017提高A组模拟9.14]捕老鼠 题目 Description 为了加快社会主义现代化,建设新农村,农夫约(Farmer Jo)决定给农庄里的仓库灭灭鼠.于是,猫被农夫约派去捕 ...
 - [JZOJ 100026] [NOIP2017提高A组模拟7.7] 图 解题报告 (倍增)
		
题目链接: http://172.16.0.132/senior/#main/show/100026 题目: 有一个$n$个点$n$条边的有向图,每条边为$<i,f(i),w(i)>$,意 ...
 - 【NOIP2017提高A组模拟9.7】JZOJ 计数题
		
[NOIP2017提高A组模拟9.7]JZOJ 计数题 题目 Description Input Output Sample Input 5 2 2 3 4 5 Sample Output 8 6 D ...
 - JZOJ 100029. 【NOIP2017提高A组模拟7.8】陪审团
		
100029. [NOIP2017提高A组模拟7.8]陪审团 Time Limits: 1000 ms Memory Limits: 131072 KB Detailed Limits Got ...
 - JZOJ 5328. 【NOIP2017提高A组模拟8.22】世界线
		
5328. [NOIP2017提高A组模拟8.22]世界线 (File IO): input:worldline.in output:worldline.out Time Limits: 1500 m ...
 - JZOJ 5329. 【NOIP2017提高A组模拟8.22】时间机器
		
5329. [NOIP2017提高A组模拟8.22]时间机器 (File IO): input:machine.in output:machine.out Time Limits: 2000 ms M ...
 - JZOJ 5307. 【NOIP2017提高A组模拟8.18】偷窃 (Standard IO)
		
5307. [NOIP2017提高A组模拟8.18]偷窃 (Standard IO) Time Limits: 1000 ms Memory Limits: 262144 KB Description ...
 - JZOJ 5286. 【NOIP2017提高A组模拟8.16】花花的森林  (Standard IO)
		
5286. [NOIP2017提高A组模拟8.16]花花的森林 (Standard IO) Time Limits: 1000 ms Memory Limits: 131072 KB Descript ...
 - JZOJ 5305. 【NOIP2017提高A组模拟8.18】C (Standard IO)
		
5305. [NOIP2017提高A组模拟8.18]C (Standard IO) Time Limits: 1000 ms Memory Limits: 131072 KB Description ...
 
随机推荐
- 吴裕雄--天生自然python学习笔记:python 用pygame模块基本绘图
			
绘制几何图形是游戏包的基本功能,很多游戏角色都是由基本图形组合而成的 . 绘制矩形: pygame.draw.rect Pygam巳绘制矩形的语法为: 用基本绘图绘制一个人脸 用基本绘图功能绘制人脸 ...
 - day23-logging模块
			
# logging日志记录的两个内容:1.有5种级别的日志记录模式.2.两种配置方式:basicconfig.logger对象. # logging的作用: #1.排错的时候需要打印很多细节来帮助排错 ...
 - iOS电商常见动画与布局、微信悬浮窗、音乐播放器、歌词解析、拖动视图等源码
			
iOS精选源码 MXScroll 介绍 混合使用UIScrollView ios 电商demo(实现各种常见动画效果和页面布局) 一行代码集成微信悬浮窗 可拖动,大小的视图,可放置在屏幕边缘. 在使用 ...
 - jquery学习随笔
			
转)jquery学习随笔(jquery选择器) jQuery的选择器是CSS 1-3,XPath的结合物.jQuery提取这二种查询语言最好的部分,融合后创造出了最终的jQuery表达式查询语言. ...
 - 转:Zabbix 监控sqlserver
			
一:Zabbix监控sqlserver 方法一: 1.思路整理 1.在zabbix server上安装Freetds.unixODBC.unixODBC-devel使其能够访问SQL Server数据 ...
 - DIP|PCN|CoevDB|PID|Y2H|RosettaDock Serve|元基因组学|微生物多样性
			
生命组学: 比较真核生物有关呼吸链的gene是比较核外编码基因,因为与呼吸有关的功能在线粒体上,线粒体位于核外.想要查看两种基因是否具有相互作用,可以对不同物种的编码ATP6 和ATP8的直系同源基因 ...
 - 吴裕雄--天生自然python学习笔记:Python3 网络编程
			
Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法. 高级别的网络 ...
 - 吴裕雄--天生自然HTML学习笔记:HTML 标题
			
在 HTML 文档中,标题很重要. HTML 标题 标题(Heading)是通过 <h1> - <h6> 标签进行定义的. <h1> 定义最大的标题. <h6 ...
 - keepalive笔记之一:基本安装
			
在安装文件中有范例说明 /usr/share/doc/keepalived-1.2.13/samples/ Keepalived:它的诞生最初是为ipvs(一些服务,内核中的一些规则)提供高可用性的, ...
 - R的基础数据结构