【计数DP】POJ3718

POJ 3718

题目描述-戳我跳转

有一些灯泡,给定其现在状态,每次选取3个不同灯泡拉下开关,求有 m m m次操作后达到目标状态的方案数

这道题粗略分析是dp,当然可以考虑用组合数学

解法1-组合数学

也就是拉下 3 × m 3 \times m 3×m次灯泡,一个灯泡最多拉 m m m次,我们可以先将那些未达到目标状态的灯泡先拉一次,后面每个灯泡拉两次即可

解法2-计数dp

首先 d p i , j dp_{i,j} dpi,j表示操作 i i i次以后有 j j j个亮着的方案数

接下来有 4 4 4种情况

1.在j个亮着的灯泡中有0个灯泡选中 d p i + 1 , j + 3 = d p i , j × C n − j 3 dp_{i+1,j+3}=dp_{i,j} \times \mathtt{C}^{3}_{n-j} dpi+1,j+3=dpi,j×Cnj3
2.在j个亮着的灯泡中有1个灯泡选中 d p i + 1 , j + 1 = d p i , j × C n − j 2 × C j 1 dp_{i+1,j+1}=dp_{i,j} \times \mathtt{C}^{2}_{n-j} \times \mathtt{C}^{1}_{j} dpi+1,j+1=dpi,j×Cnj2×Cj1
3.在j个亮着的灯泡中有2个灯泡选中 d p i + 1 , j − 1 = d p i , j × C n − j 1 × C j 2 dp_{i+1,j-1}=dp_{i,j} \times \mathtt{C}^{1}_{n-j} \times \mathtt{C}^{2}_{j} dpi+1,j1=dpi,j×Cnj1×Cj2
4.在j个亮着的灯泡中有3个灯泡选中 d p i + 1 , j − 3 = d p i , j × C j 3 dp_{i+1,j-3}=dp_{i,j} \times \mathtt{C}^{3}_{j} dpi+1,j3=dpi,j×Cj3

对于 d p i , j dp_{i,j} dpi,j但是会重复 d p n − 2 , j ∗ ( n 3 − j + 2 ) dp_{n-2,j}*(\frac{n}{3}-j+2) dpn2,j(3nj+2)
最后还要乘上 1 j \frac{1}{j} j1,因为可能出现在 j j j种情况中

注意

1 j \frac{1}{j} j1 m o d mod mod需要使用乘法逆元,要预处理;而组合数也需要先预处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值