題目傳送門
蛤蛤蛤蛤……高三真是狗……
(別問我開學第一周怎麼度過的我不想說……)
看到題目首先想到乙個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
∑md
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 2log2 n+50n log2n )o(n\log_2 \log_2 n+50n\log_2n) o(nlog2 log2n +50n log2n )?xbb別當真…… code 傳送門 首先我們發現乙個排列,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我們發現乙... description 老w是個棋藝高超的棋手,他最喜歡的棋子是馬,更具體地,他更加喜歡馬所行走的方式。老w下棋時覺得無聊,便 決定加強馬所行走的方式,更具體地,他有兩雙手,其中一雙手能讓馬從 u,v 移動到 u ax,v ay 而另一雙手能讓 馬從 u,v 移動到 u bx,v by 小w看見老w... 監獄有連續編號為1 n的n個房間,每個房間關押乙個犯人,有m種宗教,每個犯人可能信仰其中一種。如果相鄰房間的犯人的宗教相同,就可能發生越獄,求有多少種狀態可能發生越獄 輸入兩個整數m,n.1 m 10 8,1 n 10 12 可能越獄的狀態數,模100003取餘 2 366種狀態為 000 001 ...BZOJ4498 魔法的碰撞(組合數學 dp)
BZOJ 4767 兩雙手(組合數學 Dp)
bzoj1008 越獄 組合數學