首页 > 其他分享 >PeacefulTeams

PeacefulTeams

时间:2023-07-20 15:33:18浏览次数:41  
标签:需要 PeacefulTeams 分配 满足 集合 any

[ABC310D] Peaceful Teams

考虑状压 DP。

令 \(f[i][S'][S]\) 表示已经分配到了第 \(i\) 组,且该组的人集合为 \(S'\),分配过的人集合为 \(S\) 方案数。

假设加入一个人\(j\),则 \(f[i][S'][S]->f[i][S'|j][S|j]\)(当然需要满足一定条件)

或者加入之后新分了一组,则 \(f[i][S'][S]->f[i+1][j][S|j]\)(当然需要满足一定条件)

状态中的 \(j\) 注意转换成二进制的幂次。

答案为 \(f[n][any][all]\),其中 \(any\) 满足不为 \(0\),\(all\) 为所有人都分配,即 \(2^n-1\)。

注意需要最后除以排列总数 \(t!\),还需保证每组内编号上升(跨组任意),不然会算重。

初始状态 \(f[0][0][0]=1\)。

复杂度 \(O(tn4^n)\)。

AC

标签:需要,PeacefulTeams,分配,满足,集合,any
From: https://www.cnblogs.com/wscqwq/p/17568568.html

相关文章