分手是住院 期望dp

2022-04-14 03:11:28 字數 1051 閱讀 9781

這個題如果各位大神做的話肯定是"當時秒切"

像我這種據若就算了吧

首先考慮沒有隨機的情況

從大到小列舉看是最優的,

感性理解,你大的一定要選,你如果小的選了之後你大的可能讓當前小的翻轉,你當前選的可能是無意義的,

(說人話就是你選大的可能會對小的造成影響,你選小的一定不會對大的造成影響)

設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$維護約數就行了

#includeusing

namespace

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);

}

view code

六省聯考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 在目標確定的情況下,可以得知在目標到達目標...