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)

代码

  1. #include<cstdio>
  2. #include<cmath>
  3. #define lowbit(a) ((a)&-(a))
  4. #define mo 1000000007
  5. #define N 30
  6. long long f[1<<20][N];
  7. long a[1<<20];
  8. int main()
  9. { long n,m,l,x,y,s,i,j,k,q;
  10. long long num;
  11. freopen("count.in","r",stdin);
  12. freopen("count.out","w",stdout);
  13. scanf("%ld%ld%ld",&n,&m,&l);
  14. for(i=1;i<=m;i++){
  15. scanf("%ld%ld",&x,&y);
  16. a[1<<(x-1)]|=1<<(y-1);
  17. }
  18. f[0][0]=1;
  19. for(s=0;s<(1<<n);s++)
  20. for(i=0;i<=l;i++)if(f[s][i])
  21. for(q=s^((1<<n)-1);q;q^=lowbit(q)){
  22. num=0;
  23. for(k=s&a[lowbit(q)];k;k^=lowbit(k))
  24. num++;
  25. if(i+num<=l)
  26. f[s|lowbit(q)][i+num]+=f[s][i];
  27. }
  28. num=0;
  29. for(i=0;i<=l;i++)
  30. num=(num+f[(1<<n)-1][i])%mo;
  31. printf("%lld\n",num%mo);
  32. return 0;
  33. }

JZOJ 5230. 【NOIP2017模拟A组模拟8.5】队伍统计的更多相关文章

  1. JZOJ 【NOIP2017提高A组模拟9.14】捕老鼠

    JZOJ [NOIP2017提高A组模拟9.14]捕老鼠 题目 Description 为了加快社会主义现代化,建设新农村,农夫约(Farmer Jo)决定给农庄里的仓库灭灭鼠.于是,猫被农夫约派去捕 ...

  2. [JZOJ 100026] [NOIP2017提高A组模拟7.7] 图 解题报告 (倍增)

    题目链接: http://172.16.0.132/senior/#main/show/100026 题目: 有一个$n$个点$n$条边的有向图,每条边为$<i,f(i),w(i)>$,意 ...

  3. 【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 ...

  4. JZOJ 100029. 【NOIP2017提高A组模拟7.8】陪审团

    100029. [NOIP2017提高A组模拟7.8]陪审团 Time Limits: 1000 ms  Memory Limits: 131072 KB  Detailed Limits   Got ...

  5. JZOJ 5328. 【NOIP2017提高A组模拟8.22】世界线

    5328. [NOIP2017提高A组模拟8.22]世界线 (File IO): input:worldline.in output:worldline.out Time Limits: 1500 m ...

  6. JZOJ 5329. 【NOIP2017提高A组模拟8.22】时间机器

    5329. [NOIP2017提高A组模拟8.22]时间机器 (File IO): input:machine.in output:machine.out Time Limits: 2000 ms M ...

  7. JZOJ 5307. 【NOIP2017提高A组模拟8.18】偷窃 (Standard IO)

    5307. [NOIP2017提高A组模拟8.18]偷窃 (Standard IO) Time Limits: 1000 ms Memory Limits: 262144 KB Description ...

  8. JZOJ 5286. 【NOIP2017提高A组模拟8.16】花花的森林 (Standard IO)

    5286. [NOIP2017提高A组模拟8.16]花花的森林 (Standard IO) Time Limits: 1000 ms Memory Limits: 131072 KB Descript ...

  9. 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 ...

随机推荐

  1. day23-logging模块

    # logging日志记录的两个内容:1.有5种级别的日志记录模式.2.两种配置方式:basicconfig.logger对象. # logging的作用: #1.排错的时候需要打印很多细节来帮助排错 ...

  2. OA项目-表结构

    ###############  新建APP并配置   ############### INSTALLED_APPS = [ ... 'apps.users.apps.UsersConfig', 'a ...

  3. 吴裕雄--天生自然python学习笔记:python实现自动网页测试

    Python 可实现的网页测试的功能十分强大,甚至能通 过编程来实现让绝大多数的测试过程自动化. 这对很多开 发者来说,绝对是不可多得的神器. hash lib 纽件可以判别文件是否有过更改,只需要用 ...

  4. Kafka、RabbitMQ、RocketMQ、ActiveMQ

    一.资料文档 Kafka:中.有kafka作者自己写的书,网上资料也有一些.rabbitmq:多.有一些不错的书,网上资料多.zeromq:少.没有专门写zeromq的书,网上的资料多是一些代码的实现 ...

  5. Sampling Error|Sampling mean|population mean

    7.1 Sampling Error; the Need for Sampling Distributions 样本均值的三种表达: Sampling distribution of the samp ...

  6. 3dmax2019卸载/安装失败/如何彻底卸载清除干净3dmax2019注册表和文件的方法

    3dmax2019提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装3dmax2019失败提示3dmax2019安装未完成,某些产品无法安装,也有时候想重新安装3 ...

  7. python学习笔记(9)函数(一)

    定义一个函数 你可以定义一个由自己想要功能的函数,以下是简单的规则: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 (). 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定 ...

  8. G1最佳实践

    示例 -Xms1550m -Xmx1550m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -verbosegc -XX:+PrintGCDateStamps -Xlog ...

  9. springdatajpa 认识以及使用方式

    1.spingdatajpa是什么? Spring Data JPA 是 Spring 基于 ORM 框架.JPA 规范的基础上封装的一套JPA应用框架(即上述的:JPA的实现产品),可使开发者用极简 ...

  10. 吴裕雄--天生自然 PYTHON语言数据分析:ESA的火星快车操作数据集分析

    import os import numpy as np import pandas as pd from datetime import datetime import matplotlib imp ...