[DP] [组合数学] [BZOJ4807] 車

本文介绍了一个关于車放置的问题,通过动态规划方法解决,并进行了优化,最终转化为求组合数问题。文章详细阐述了解题思路及代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目传送门
蛤蛤蛤蛤……高三真是狗……
(别问我开学第一周怎么度过的我不想说……)
看到题目首先想到一个DP, d p [ i ] [ j ] dp[i][j] dp[i][j]表示放在第 i i i行第 j j j列的可行方案数,于是就有如下转移辣:
d p [ i ] [ j ] = ∑ k = j + 1 m d p [ i − 1 ] [ k ]      i ∈ [ 2 , n ] , j ∈ [ 1 , m ] dp[i][j]=\sum\limits_{k=j+1}^{m}dp[i-1][k] \ \ \ \ i\in[2,n],j\in[1,m] dp[i][j]=k=j+1mdp[i1][k]    i[2,n],j[1,m]
答案就是:
a n s = ∑ i = 1 m d p [ n ] [ i ] ans=\sum\limits_{i=1}^{m}dp[n][i] ans=i=1mdp[n][i]
初状态是:
d p [ 1 ] [ i ] = 1      i ∈ [ 1 , m ] dp[1][i]=1 \ \ \ \ i\in [1,m] dp[1][i]=1    i[1,m]
应该比较好理解吧……車不能与其他車放置在同行和同列,还必须要求每个車的左上不能有其他車。
不过棋盘的放置是不确定的,可以 n n n作为行也可以 m m m作为行,所以把 n n n m m m反过来再DP一遍。发现有时候 n n n作为行无解有时候 m m m作为行无解,有解时 n < m n<m n<m,所以DP一遍就好了。
这样随便一个 O ( n m 2 ) O(nm^2) O(nm2)的DP就出来了,可是……过不去……
那么找找优化方法,注意到第二行的DP类似于对第一行做了个前缀和,每一行与前一行都错开一位做前缀和处理,所以那个DP式子中代价 O ( m ) O(m) O(m)的求和就可以优化一下……
列个表看一下,其实DP方程就被优化成了这样:
d p [ i ] [ j ] = d p [ i ] [ j + 1 ] + d p [ i − 1 ] [ j + 1 ]      i ∈ [ 2 , n ] , j ∈ [ 1 , m ] dp[i][j]=dp[i][j+1]+dp[i-1][j+1]\ \ \ \ i\in[2,n],j\in[1,m] dp[i][j]=dp[i][j+1]+dp[i1][j+1]    i[2,n],j[1,m]
如果学过选修2-3,就会看出这和组合数很类似啊……
( n + 1 m ) = ( n m ) + ( n m − 1 ) \binom{n+1}{m}=\binom{n}{m}+\binom{n}{m-1} (mn+1)=(mn)+(m1n)
具体证明……这个数学老师应该讲了吧……(我忘了……)
这个DP时间复杂度是 O ( n m ) O(nm) O(nm)的,不过打一下表,发现这就是把杨辉三角顺时针旋转了 9 0 ∘ 90^\circ 90,要求的值,即最后一行的和,其实就是杨辉三角中一列的和,要求的答案在杨辉三角中可以表示为:
a n s = ∑ i = 1 m − 1 ( n − 1 i ) ans=\sum\limits_{i=1}^{m-1}\binom{n-1}{i} ans=i=1m1(in1)
这个求和还是数学课上讲过……可以化简为 ( n m ) n\choose m (mn)……
所以优化了一堆,就是求个组合数咯……输出最后50位……
至于 n < m n<m n<m,将DP数组转置的时候自然是 m < n m<n m<n,所以有 m > n m>n m>n的情况只需把棋盘转一下,转成合法情况放置再转回去,就是对应的合法情况咯……
有意思的题……
时间复杂度 O ( n log ⁡ 2 log ⁡ 2 n + 50 n log ⁡ 2 n ) O(n\log_2 \log_2 n+50n\log_2n) O(nlog2log2n+50nlog2n)?xbb别当真……
Code

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值