【Codeforces 1326F2 Wise Men (Hard Version)】【状压dp+容斥原理】

该博客探讨了Codeforces上的一个竞赛问题1326F2,即'Wise Men (Hard Version)'。博主详细介绍了题意,当有n个点之间存在边连接时,如何根据排列P计算出有多少个排列能构造出特定的01串。博主提出使用状压DP和容斥原理来解决这个问题。首先,他们将序列分成若干段,并预处理出各种组合路径的方案。接着,利用容斥原理计算出每个子集的贡献,最终优化了算法,使其复杂度降低到O((n^2 + P(n))^n),其中P(n)为n的整数划分数。
摘要由CSDN通过智能技术生成

题意

n n n个点,有些点之间有边。对于 1 1 1 n n n的每个排列 P P P,构造长度为 n − 1 n-1 n1 01 01 01 s t r str str,其中 s t r [ i ] = 1 str[i]=1 str[i]=1当且仅当 p i p_i pi p i + 1 p_{i+1} pi+1之间有边。对每个长度为 n − 1 n-1 n1的串 s t r str str,求有多少个排列构造出来的串等于 s t r str str
n ≤ 18 n\le 18 n18

分析

考虑对每个串求它超集的答案之和,然后dp一次得到答案。

如果我们把有边相连且在排列中相邻的点连在一起,把序列分成了若干段,满足每一段的长度之和为 n n n。可以发现分段排序后相同的串它们的答案是一样的,故只需要对 n n n的每种整数划分方案,求出该方案的答案即可。

先预处理出 g i , s g_{i,s} gi,s表示选出一条由 i i

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值