【JZOJ5230】队伍统计【状压DP】

news/2025/1/14 1:53:46/

题目大意:

题目链接:https://jzoj.net/senior/#main/show/5230
现在有 n n n个人要排成一列,编号为 1 ∼ n 1\sim n 1n 。但由于一些不明原因的关系,人与人之间可能存在一些矛盾关系,具体有 m m m条矛盾关系 ( u , v ) (u,v) (u,v),表示编号为 u u u的人想要排在编号为 v v v的人前面。要使得队伍和谐,最多不能违背 k k k条矛盾关系(即不能有超过 k k k条矛盾关系 ( u , v ) (u,v) (u,v),满足最后 v v v排在了 u u u前面)。问有多少合法的排列。答案对 1 0 9 + 7 取 10^9+7取 109+7模。


思路:

n ≤ 20 n\leq 20 n20,考虑状压 d p dp dp
很明显除了状态那一维还需要一维记录违背了多少关系。
于是就设 f [ S ] [ i ] f[S][i] f[S][i]表示状态为 S S S,违反了 i i i条关系的方案数。
那么就有
f [ S ] [ j ] = ( f [ S ] [ j ] + f [ l a s t S ] [ j − s u m ] ) % M O D f[S][j]=(f[S][j]+f[lastS][j-sum])\%MOD f[S][j]=(f[S][j]+f[lastS][jsum])%MOD

其中 l a s t S lastS lastS表示上一个状态,可以通过枚举最后是那个人进入来求。
时间复杂度 O ( 2 n n ( n + k ) ) O(2^nn(n+k)) O(2nn(n+k))


代码:

#include <cstdio>
using namespace std;const int N=21;
const int MAXN=1048600;
const int MOD=1e9+7;
int n,m,k,x,y,ans,f[MAXN][N],hate[N];int main()
{freopen("count.in","r",stdin);freopen("count.out","w",stdout);scanf("%d%d%d",&n,&m,&k);for (int i=1;i<=m;i++){scanf("%d%d",&x,&y);hate[y]|=(1<<(x-1));}f[0][0]=1;for (int S=1;S<(1<<n);S++)for (int i=1;i<=n;i++)if ((S&(1<<(i-1)))==(1<<(i-1))){int lastS=S-(1<<(i-1)),sum=0;for (int j=1;j<=n;j++)if ((hate[i]&(1<<(j-1)))==(1<<(j-1))&&(lastS&(1<<(j-1)))==(1<<(j-1)))sum++;for (int j=sum;j<=k;j++)f[S][j]=(f[S][j]+f[lastS][j-sum])%MOD;}for (int i=0;i<=k;i++)ans=(ans+f[(1<<n)-1][i])%MOD;printf("%d\n",ans);return 0;
}

http://www.ppmy.cn/news/346225.html

相关文章

hdu5230

bc41第三题&#xff1a; 由 1 &#xff5e; n-1 这 n-1 个数组成 l - c 到 r - c 闭区间内的数共有多少种组合方法&#xff1b; 据称本来应该也比较简单吧&#xff0c;xiaoxin说了个五边形数&#xff0c;然后纷纷找了五边形数的模板&#xff0c;虽然并没有来得及AC&#xff0c;…

hdu 5230

ZCC loves hacking 题目描述&#xff1a; 其实就是给了n~100000&#xff0c;c&#xff0c;l&#xff0c;r&#xff0c;其中C≤L≤R 题解&#xff1a; 所有情况数&#xff0c;刚开始一定会想dp【i】【j】用到数i达到和j的背包的算法&#xff0c;但是发现太大了。而且没有很好…

ZCMU--5230: 排练方阵(C语言)

Description 又到了一年一度的白马湖小学运动会了&#xff0c;为了使入场式能顺利进行&#xff0c;小朋友们最近在排练方阵。黄老师和张老师作为二年级&#xff08;1&#xff09;班的班主任和副班主任&#xff0c;却被小朋友的平均身高困扰住了。 方阵是一个n*m的矩阵&#x…

诺基亚5230使用小技巧[转]

转自http://www.shouji138.com/help/info76.htm 前几天有个朋友要买手机&#xff0c;价位在1000至1500之间&#xff0c;我推荐他买诺基亚5230&#xff0c;除了品牌过硬&#xff0c;市场占有率高之外&#xff0c;还有很多优点&#xff0c;全触摸&#xff0c;支持GPS功能&#xf…

Netbackup5230备份一体机重删率异常故障分析日志收集

1.修改bp.conf配置文件显示重删率 BPDBJOBS_COLDEFS JOBID 5 true BPDBJOBS_COLDEFS TYPE 7 false BPDBJOBS_COLDEFS STATE 4 false BPDBJOBS_COLDEFS STATUS 4 false BPDBJOBS_COLDEFS POLICY 35 false BPDBJOBS_COLDEFS SCHEDULE 12 false BPDBJOBS_COLDEFS CLI…

【电路】电路与电子技术基础 课堂笔记 第14章 触发器

触发器是数字电路中的一种记忆部件&#xff0c; 这一章需要关注的焦点是&#xff1a;各种触发器的特点、状态方程、激励表、状态转移图以及时序图等。 14.1 基本触发器 14.1.1 基本触发器的逻辑结构和工作原理 14.1.2 基本触发器功能的描述 1. 状态转移真值表 2. 特征方程&…

面试经典150题:数组/字符串合集

新专栏&#xff0c;预计两个月写完吧&#xff0c;每天下班回来抽空做几道题。会把做题计划顺序记录下来&#xff0c;如果你有缘&#xff0c;刷到这个开篇序列&#xff0c;那就跟着文章去练题吧。初学者可以慢慢来 88. 合并两个有序数组 void merge(vector<int>& nums…

用Python将《青花瓷》的歌词生成词云图

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 因为上次有小伙伴问我&#xff0c;歌曲的歌词和评论怎么生成词云图&#xff0c;想买代码… 当时我就拒绝了&#xff0c;直接免费送给了他。 所以今天来分享给大家 我们以周董的《青花瓷》为例&#xff0c;要对《青花瓷》歌词…