【LOJ 2145】「SHOI2017」分手是祝願
LOJ 2145 100pts
這題。。。BT啊
首先我們很容易想出\(dp(msk)\)表示現在燈開關的情況是\(msk\),期望通過多少步走到終結態。
很明顯\(dp(msk)=\frac{1}{n} \times \sum_{i=1}^n dp(msk\ xor\ M_i)\)。
其中\(M_i\)表示把\(i\)這個燈按下之後會改變哪些燈的狀態。
然後發現這個轉移是有環的。。。所以高斯消元。
然後很開心地發現這個復雜度是\(O(2^3n)\)的,
所以看看是不是可以合並某些狀態。
觀察得如果兩個\(msk\)達到終結態需要的最少按的次數是相同的,那麽他們的\(dp\)值也是相同的。
所以考慮改變狀態為\(dp(i)\)
觀察得轉移是\(dp(i)=\frac{i}{n}dp(i-1)+\frac{n-i}{n}dp(i+1)+1\)。
很遺憾這個還是有環的。。。所以高斯消元。
這個復雜度就是\(O(n^3)\)的了,可以拿\(60pts\)(因為最後乘\(n!\)會爆炸)。
根據定義\(dp(n)=dp(n-1)+1\)。
那麽我們看看\(dp(n-1)=???\)
根據定義\(dp(n-1)=\frac{n-1}{n}dp(n-2)+\frac{1}{n}dp(n)+1\)
\(=\frac{n-1}{n}dp(n-2)+\frac{1}{n}dp(n-1)+\frac{1}{n}+1\)
所以\(\frac{n-1}{n}dp(n-1)=\frac{n-1}{n}dp(n-2)+\frac{1}{n}+1\)
所以\(dp(n-1)=dp(n-2)+\frac{n+1}{n-1}\)。
那麽我們可以假設\(dp(i)=dp(i-1)+c(i)\)。
那麽根據定義\(dp(i)=\frac{i}{n}dp(i-1)+\frac{n-i}{n}dp(i+1)+1\),
\(=\frac{i}{n}dp(i-1)+\frac{n-i}{n}(dp(i)+c(i+1))+1\),
所以\(\frac{i}{n}dp(i)=\frac{i}{n}dp(i-1)+\frac{n-i}{n}c(i+1)+1\)
簡化得\(dp(i)=dp(i-1)+\frac{(n-i)c(i+1)+n}{i}\)。
所以\(c(i)=\frac{(n-i)c(i+1)+n}{i}\)。
做完了。。。
【LOJ 2145】「SHOI2017」分手是祝願