ZOJ - 4114 Flipping Game(dp+组合数学)
生活随笔
收集整理的這篇文章主要介紹了
ZOJ - 4114 Flipping Game(dp+组合数学)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接:點擊查看
題目大意:給出一個長度為 n 的 01 字符串表示 n 個燈泡的狀態,1 為點亮,0 為熄滅,現在需要進行 k 輪操作,每輪操作可以選擇恰好 m 個位置,將燈泡的狀態置反,現在給出初始狀態和終止狀態,問有多少種方案可以到達
題目分析:首先不難看出,如果對一個相同的位置操作偶數次,不會改變其狀態,只有操作次數為奇數時才會改變其狀態,那么設計二維 dp ,dp[ i ][ j ] 代表的是到達第 i 輪操作時,共有 j 次操作次數為奇數的方案數,轉移的話,就是枚舉 k ,代表的是當前選擇 k 個位置從偶數變為奇數,因為一共需要操作 m 次,所以對應的需要將 m - k 個位置從奇數變為偶數,因為初始時有 j 次操作為奇數,n - j 次操作為偶數,所以滿足上述 k 的方案數為 C[ j ][ k ] * C[ n - j ][ m - k ] ,簡單的組合數學,然后轉移就好了
有點沒搞清楚的就是初始話,設初始狀態和終止狀態共有 num 個位置不同,則需要給 dp[ 0 ][ num ] 初始為 1 ,答案是 dp[ k ][ 0 ] ,而不能是 dp[ 0 ][ 0 ] = 0 ,然后輸出 dp[ k ][ num ]?
代碼:
?
?
總結
以上是生活随笔為你收集整理的ZOJ - 4114 Flipping Game(dp+组合数学)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HihoCoder - 1873 Fro
- 下一篇: ZOJ - 4117 BaoBao Lo