1. 程式人生 > >【LOJ 2145】「SHOI2017」分手是祝願

【LOJ 2145】「SHOI2017」分手是祝願

n) 表示 很遺憾 mat 改變 pan 就是 們的 sum

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」分手是祝願