DP 組合數學 BZOJ4807 車

2021-08-07 03:25:33 字數 2657 閱讀 1976

題目傳送門

蛤蛤蛤蛤……高三真是狗……

(別問我開學第一周怎麼度過的我不想說……)

看到題目首先想到乙個dp,dp[

i][j

]dp[i][j]

dp[i][

j]表示放在第i

ii行第j

jj列的可行方案數,於是就有如下轉移辣:

d p[

i][j

]=∑k

=j+1

mdp[

i−1]

[k]i

∈[2,

n],j

∈[1,

m]

dp[i][j]=\sum\limits_^dp[i-1][k] \ \ \ \ i\in[2,n],j\in[1,m]

dp[i][

j]=k

=j+1

∑m​d

p[i−

1][k

]i∈[

2,n]

,j∈[

1,m]

答案就是:

a ns

=∑i=

1mdp

[n][

i]

ans=\sum\limits_^dp[n][i]

ans=i=

1∑m​

dp[n

][i]

初狀態是:

d p[

1][i

]=1i

∈[1,

m]

dp[1][i]=1 \ \ \ \ i\in [1,m]

dp[1][

i]=1

i∈[1

,m]應該比較好理解吧……車不能與其他車放置在同行和同列,還必須要求每個車的左上不能有其他車。

不過棋盤的放置是不確定的,可以n

nn作為行也可以m

mm作為行,所以把n

nn和m

mm反過來再dp一遍。發現有時候n

nn作為行無解有時候m

mm作為行無解,有解時n

n<

m,所以dp一遍就好了。

這樣隨便乙個o(n

m2

)o(nm^2)

o(nm2)

的dp就出來了,可是……過不去……

那麼找找優化方法,注意到第二行的dp類似於對第一行做了個字首和,每一行與前一行都錯開一位做字首和處理,所以那個dp式子中代價o(m

)o(m)

o(m)

的求和就可以優化一下……

列個表看一下,其實dp方程就被優化成了這樣:

d p[

i][j

]=dp

[i][

j+1]

+dp[

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]=d

p[i]

[j+1

]+dp

[i−1

][j+

1]i∈

[2,n

],j∈

[1,m

]如果學過選修2-3,就會看出這和組合數很類似啊……

( n+

1m)=

(nm)

+(nm

−1

)\binom=\binom+\binom

(mn+1​

)=(m

n​)+

(m−1

n​)具體證明……這個數學老師應該講了吧……(我忘了……)

這個dp時間複雜度是o(n

m)

o(nm)

o(nm

)的,不過打一下表,發現這就是把楊輝三角順時針旋轉了90∘

90^\circ

90∘,要求的值,即最後一行的和,其實就是楊輝三角中一列的和,要求的答案在楊輝三角中可以表示為:

a ns

=∑i=

1m−1

(n−1

i)

ans=\sum\limits_^\binom

ans=i=

1∑m−

1​(i

n−1​

)這個求和還是數學課上講過……可以化簡為(nm

)n\choose m

(mn​)……

所以優化了一堆,就是求個組合數咯……輸出最後50位……

至於n

n<

m,將dp陣列轉置的時候自然是m

m<

n,所以有m

>

nm>n

m>

n的情況只需把棋盤轉一下,轉成合法情況放置再轉回去,就是對應的合法情況咯……

有意思的題……

時間複雜度o(n

log⁡

2log⁡2

n+50n

log⁡2n

)o(n\log_2 \log_2 n+50n\log_2n)

o(nlog2​

log2​n

+50n

log2​n

)?xbb別當真……

code

BZOJ4498 魔法的碰撞(組合數學 dp)

傳送門 首先我們發現乙個排列,2個魔法使之間一定要填max di,di 1 1max d i,d 1 max di di 1 1個格仔而如果總共一定要填的為k kk個,貢獻就是 l kn n l k 考慮dpdp dp出每種情況的方案數 首先按d dd從大到小排序消除max maxma x我們發現乙...

BZOJ 4767 兩雙手(組合數學 Dp)

description 老w是個棋藝高超的棋手,他最喜歡的棋子是馬,更具體地,他更加喜歡馬所行走的方式。老w下棋時覺得無聊,便 決定加強馬所行走的方式,更具體地,他有兩雙手,其中一雙手能讓馬從 u,v 移動到 u ax,v ay 而另一雙手能讓 馬從 u,v 移動到 u bx,v by 小w看見老w...

bzoj1008 越獄 組合數學

監獄有連續編號為1 n的n個房間,每個房間關押乙個犯人,有m種宗教,每個犯人可能信仰其中一種。如果相鄰房間的犯人的宗教相同,就可能發生越獄,求有多少種狀態可能發生越獄 輸入兩個整數m,n.1 m 10 8,1 n 10 12 可能越獄的狀態數,模100003取餘 2 366種狀態為 000 001 ...