3.12做题记录

P6846 [CEOI2019] Amusement Park

考虑所有DAG都是一正一反成对出现的,且两者所需的步数和为 m 2 \frac{m}{2} 2m,那么答案就转换为给这个无向图定向的DAG方案数 ∗ m 2 * \frac{m}{2} 2m

子集dp即可 O ( 3 n ) O(3^n) O(3n)


代码

CF1215E. Marbles

考虑如果是给序列排序的话,最少的次数就是逆序对数,因为交换一次就可以使得逆序对减少一个,没有逆序对的时候就完成了

现在就相当于给这20种颜色赋上不同的值,现在从小到大赋值,记 f s f_s fs表示已经选择了s中为1的颜色了,现在枚举一个为0的位置作为下一个数字,计算带来的贡献

先预处理出来 g s [ i ] [ j ] gs[i][j] gs[i][j]表示颜色 i 和颜色 j 有多少个逆序对

时间复杂度 O ( 20 ∗ n + 2 20 ∗ 20 ∗ 20 ) O(20*n+2^{20}*20*20) O(20n+2202020)


代码

CF840C On the Bench

给每个数除去平方因子,问题转化为求多少个排列满足不存在两个相邻的数相等

我们给序列从小到达排序
经典dp问题,设 f [ i ] [ j ] [ k ] f[i][j][k] f[i][j][k]表示前 i 个数填完后,有 j 个相邻数对,与当前数字相等相邻数对有 k 个

这样就分类讨论,是插在两个不相等数中间,还是放在两个和自己相等的数中间,还是放在两个相等的却不等于自己的数中间


代码

UOJ80. 二分图最大权匹配

今天再来复习一下这个带权km的bfs写法,时间复杂度 O ( n 3 ) O(n^3) O(n3)

先求出每个男生最大的期望值,也就是所有可能的女生的最大值

然后开始逐个bfs,每次给slack松弛值赋为inf,然后开始先给当前的男生分配一个虚拟女生0号,然后试图增广,也就是while的主体部分,u为当前到的女生的编号,找到这个女生之前分配的男生x。我们枚举每个女生来更新松弛值,并记录更新的路径到pre中,注意这里每个女生在一次bfs中只能被访问一次,用一个vis记录一下就好。找到最小的delta之后,给所有经过的女生的期望值-delta,男生+delta,没走过的松弛值-delta。重复上述过程,直到发现没被匹配过的女生,

然后我们把这个增广路的匹配依次修改,最后计算答案即可。

好像说的不太清楚。。。。


代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值