Codeforces Global Round 14 E. Phoenix and Computers 思维 + dp
傳送門
文章目錄
- 題意:
- 思路:
題意:
有nnn臺電腦,你可以手動打開某個電腦,如果第i?1,i+1i-1,i+1i?1,i+1臺電腦都打開了,那么第iii臺電腦會自動打開。不能手動打開自動打開的電腦,問有多少種打開的方式使得所有電腦都開機。
思路:
首先考慮全都手動打開nnn臺電腦有多少種方案。
從111開始,那么111右邊的所有電腦都必須依次打開,方案數是C(n?1,0)C(n-1,0)C(n?1,0)。
從222開始,那么222右邊的所有電腦都必須依次打開,左邊的電腦可以在保證順序的情況下任意時刻打開,方案數C(n?1,1)C(n-1,1)C(n?1,1)。
以此類推,總方案是C(n?1,0)+C(n?1,1)+...+C(n?1,n?1)=2n?1C(n-1,0)+C(n-1,1)+...+C(n-1,n-1)=2^{n-1}C(n?1,0)+C(n?1,1)+...+C(n?1,n?1)=2n?1。
再考慮電腦最終一定是一段手動開的,一個自動,一段手動,一段自動…一段手動。
那么定義f[i][j]f[i][j]f[i][j]表示第iii臺電腦是手動開的,第i+1i+1i+1臺電腦是自動開的,手動打開了jjj臺電腦。
我們可以枚舉多打開的電腦個數kkk來轉移,即f[i][j]?>f[i+1+k][j+k]f[i][j]->f[i+1+k][j+k]f[i][j]?>f[i+1+k][j+k],含義是pos?>ipos->ipos?>i手動打開,i+1i+1i+1自動打開,i+2?>i+1+ki+2->i+1+ki+2?>i+1+k手動打開。
由于多開了kkk臺電腦,那么按照上面結論,它有2k?12^{k-1}2k?1個打開的方法。
由于前面已經打開了jjj個了,我們可以從j+kj+kj+k個位置選kkk個位置來打開kkk個電腦,所以乘一個C(k+j,k)C(k+j,k)C(k+j,k)即可。
轉移方程為:f[i+k+1][j+k]+=f[i][j]?2k?1?C(j+k,k)f[i+k+1][j+k]+=f[i][j]*2^{k-1}*C(j+k,k)f[i+k+1][j+k]+=f[i][j]?2k?1?C(j+k,k)
總結
以上是生活随笔為你收集整理的Codeforces Global Round 14 E. Phoenix and Computers 思维 + dp的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Codeforces Round #70
- 下一篇: 10岁儿童减肥的最好方法是什么