這個題如果各位大神做的話肯定是"當時秒切"
像我這種據若就算了吧
首先考慮沒有隨機的情況
從大到小列舉看是最優的,
感性理解,你大的一定要選,你如果小的選了之後你大的可能讓當前小的翻轉,你當前選的可能是無意義的,
(說人話就是你選大的可能會對小的造成影響,你選小的一定不會對大的造成影響)
設f[i]表示當你還剩i個開關要按時期望步數
那麼題目中說最後k步選最優策略就沒用了,f[i]一定會選擇最優即一定按需要按的必須選的燈f[i]=1
那麼考慮隨機,
貢獻分兩部分,1.按你需要按的$\frac$2.按不需按的是$\frac*(f[i+1]+f[i]+1)$
解釋一下,你選到不該選的,你要用$1$步到$f[i+1]$狀態,然後你要用$f[i+1]$步翻轉回來,,回到當前狀態之後你還要花$f[i]$步達到當前選到正確燈狀態(這個式子讓我們想起了tree這個題,很像不是嗎)
關於求必選集合,用$vector$維護約數就行了
#includeusingview codenamespace
std;
#define ll long long
#define a 1010101
#define mod 100003ll f[a],a[a],inv[a];
ll cnt=0
,n,k;
vector
vec[a];
intmain()
for(ll i=n-1;i>k;i--)
f[i]=(n+(n-i)*f[i+1]%mod)*inv[i]%mod;
for(ll i=k;i>=1;i--)
f[i]=1
; ll ans=0
;
for(ll i=1;i<=cnt;i++)
(ans+=f[i])%=mod;
for(ll i=1;i<=n;i++)
ans=ans*i%mod;
printf(
"%lld\n
",ans);
}
六省聯考2017 分手是祝願 期望DP
略 先考慮初始狀態滅掉所有燈的最小次數 cnt 可以從大到小貪心求出。因為每個燈只能被比它大的更新,可以直接從大到小,遇到開的就按滅,同時操作它的約數。複雜度 o n log n 如果 cnt leq k 那麼只需要初始時按最小次數操作即可,輸出 n cdot cnt 否則需要期望dp.容易發現,每...
期望及期望dp
簡單說就是概率 概率的價值 osu x 1 3 x3 3x2 3x 1 可以看出每多出乙個1,答案就會增加3x2 3x 1 於是可以維護x和x2的期望 x1 i x1 i 1 1 p i x2 i x2 i 1 2 x1 i 1 1 p i ans i ans i 1 3 x2 i 1 3 x1 i...
期望dp小結
前言 期望dp狀態的定義是較為顯然的,但對於狀態的轉移往往需要一些公式的推導。關鍵的幾點是狀態之間的互通性,和狀態轉移的花費,以及轉移的概率 解決期望dp的幾個技巧如下 e x y e x e y 我們所求的期望可以化為多個步驟的期望累和 相關題目 j,l 在目標確定的情況下,可以得知在目標到達目標...