https://www.iai.sh.cn/contest 2022.04 银组,理论上 100 + 100 + 30 + 100 100+100+30+100 100+100+30+100。
T1 上锁的抽屉
题目描述
有一个抽屉柜里竖排了 n n n 只抽屉。每个抽屉有一把锁。若要把一只抽屉『锁死』,就必须锁上它自己,而且要把它的上一层抽屉也锁上。请问有多少种上锁的方法,可以恰好『锁死』 m m m 只抽屉?
由于答案可能很大,输出方案数模 1 0 9 + 7 10^9+7 109+7 的余数。
大体思路
计数类问题显然想到动态规划。
一般地,设 f [ i , j ] f[i,j] f[i,j] 表示前 i i i 个抽屉『锁死』 j j j 个的方案数。这样,我们只需要对第 i i i 个抽屉上锁是否影响『锁死』的个数即可。
此时我们发现,这还取决于第 i − 1 i-1 i−1 个抽屉是否上锁。因此,我们规定 f [ i , j , 0 ] f[i,j,0] f[i,j,0] 表示前 i i i 个抽屉『锁死』 j j j 个,且第 i i i 个抽屉不上锁的方案数, f [ i , j , 1 ] f[i,j,1] f[i,j,1] 表示前 i i i 个抽屉『锁死』 j j j 个,且第 i i i 个抽屉上锁的方案数。
当第 i i i 个抽屉上锁时,我们可以借助第 i − 1 i-1 i−1 个抽屉上锁,则之前『锁死』的个数为 j − 1 j-1 j−1 个;也可能第 i − 1 i-1 i−1 个抽屉不上锁,则前 i − 1 i-1 i−1 个需要『锁死』 j j j 个。第 i i i 个抽屉不上锁时,必然完全依靠前 i − 1 i-1 i−1 个抽屉『锁死』 j j j 个,由此可得状态转移方程:
f [ i , j , 0 ] = f [ i − 1