数数题(计数类 DP)做题记录

数数题(计数类 DP)做题记录

CF1657E Star MST

我们称张无向完全图是美丽的当且仅当:所有和 \(1\) 相连的边的边权之和等于这张完全图的最小生成树的边权之和。

完全图点数为 \(n\),边权 \(\in[1,k]\)\(1\le n,k\le 250\)

发现所有和 \(1\) 相连的边边权之和等于 MST 的边权之和,即限制这张图的 MST 就是以 \(1\) 为中心的“星星”形状。

所以任意两个点之间的边权一定大于等于他们与 \(1\) 相连的边的边权的最大值。

那么设 \(dp(i,j)\) 表示连了 \(\le i\) 的边权,选择了除了 \(1\) 之外 \(j\) 个点的方案数。

那么枚举状态,将转移表示把边权为 \(i\) 边新加进去,可以得到转移方程:

\[dp(i,j)=\sum_{x=0}^{j}dp(i-1,x)\times \dbinom{j}{x}\times (k-x+1)^{\binom{j}{2}-\binom{x}{2}} \]

总时间复杂度 \(\mathcal{O(n^3)}\)(假设 \(n,k\) 同阶)。

P8096 [USACO22JAN] Drought G

Farmer John 的 \(n(n\le 100)\) 头奶牛站成一排,每一个都有一个饥饿值 \(h_i\),Farmer John 可以每次选择相邻的两头奶牛使她们的饥饿值同时 \(-1\)

Farmer John 想让他的所有奶牛都有相同的饥饿值,尽管他不知道每头奶牛具体的饥饿值,只知道她们每一头饥饿值的上限 \(H_i(H_i\le 1000)\),使得 \(h_i\le H_i\)

请计算出所有满足 Farmer John 的要求的 \(n\) 元组 \([h_1,h_2,\cdots,h_n]\) 数量对 \(10^9+7\) 取模的结果。

假设最终都到达的饥饿值为 \(k\),设 \(dp_{i,j}\) 表示前 \(i-1\) 头牛都达到了要求,第 \(i\) 头牛的饥饿值为 \(j\) 的方案数。

那么因为需要让 \(i\) 牛也变成 \(k\),可以列出转移方程:

\[dp_{i,j}\rightarrow\forall j'\in[k,H_{i+1}-j+k]:dp_{i+1,j'} \]

上面的方程可以用前缀和优化实现 \(O(1)\) 转移。

那么最终答案就是 \(dp_{n,k}\)

由于我们发现如果 \(n\) 是偶数,可以通过 \(\dfrac{n}{2}\) 次操作使所有饥饿值 \(-1\),所以如果 \(n\) 为偶数只用枚举一个 \(k\) 即可。

[USACO22MAR] Pair Programming G

还是不会

P4778 Counting swaps

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值