這道題目我維護每個回合每個人的每種血量的機率想到了,甚至DP也想到了,但是這個DP的方法太新了
因為本來維護每個回合每個人的每種血量的機率後,我們如果用組合數去選出若干個人計算機率,肯定時間複雜度太大了,這個時候我們一般都是用DP去統計滿足條件的機率,所以要用DP,而且比較容易想到要計算\(g[i][j]\)表示第\(i\)個人以及其餘還有\(j\)個人活著的機率(但是將第\(i\)個人放在最後,這確實是非常新的思想了,可以記住)
見這篇題解
一些解釋:
\(f[i][j]\)涉及的\(i\)個人是某一次使用結界技能時題目給出的\(k\)個人(而不是全部\(n\)個敵人)
文章中說“\(f[k-1]\)就是\(g[i]\)”的意思是\(f[k-1][j]=g[i][j]\)
複雜度\(O(n^3)\)怎麼算出來的:列舉每一個\(i\),將其放在最後,然後計算\(f\),一共是\(O(n\cdot n^2)=O(n^3)\)
最後倒著求那裡,\(f[k-1][j]\)不應該放在分子那裡,應該是\(f[k-1][j]\)等於後面那一坨分數;至於倒著求怎麼想到的,我們最開始利用了換序來考慮整體,所以整體是不變的,可以考慮利用這個不變數