簡單題 解題報告

2022-04-29 21:09:06 字數 1096 閱讀 7763

給一顆\(n(\le 80)\)節點的樹,開始所有節點都是白色,每個時間隨機染黑一條鏈,求把整棵樹染黑的期望時間,對\(998244353\)取模

考慮\(\min-\max\)容斥

某集合\(s\)最後乙個點出現的期望時間為\(\max s\),第乙個點出現的期望時間是\(\min s\),則有

\[\max(s)=\sum_(-1)^\min (t)

\]考慮求出\(\min t\)

乙個顯然的暴力是列舉所有\(t\),然後列舉所有染色方案,求出不經過這\(t\)的染色方案的概率\(p\)

那麼\(\min (t)=\sum\limits_^p^i=\frac\)

於是可以\(dp\)染色方案數目,求出概率

令\(dp_\)表示\(i\)子樹有\(j\)個點到\(i\)的路徑上沒有白點且共有\(k\)條路徑沒有白點的方案數,並把容斥係數也帶上

轉移的時候列舉每一維,然後拼一拼,第二維壓進去是給第三維轉移用的,至於複雜度,不是很清楚呢...

code:

#include #include #include template void read(t &x)

const int mod=998244353;

const int n=85;

inline void add(int &a,int b)

#define mul(a,b) (1ll*(a)*(b)%mod)

int qp(int d,int k)return f;}

int head[n],next[n<<1],to[n<<1],cnt;

void addedge(int u,int v)

int dp[n][n][n*n/2],f[n][n*n/2],siz[n],n,ans;

void dfs(int now,int fa)

}int main()

{ freopen("jiandanti.in","r",stdin);

freopen("jiandanti.out","w",stdout);

read(n);

for(int u,v,i=1;i2019.3.28

dp OJ D題解題報告

題目描述 一大串英文就不說了,反正就是先輸入乙個大於零小於一百的數,然後迴圈,每一次都輸入乙個字串,判斷要鍵盤輸入這段字串需要敲幾次鍵盤。友情提示,鍵盤開始和結束的時候caps都是小寫狀態,我最後才看出來這事,我真想吐槽一句,你管他最後的狀態是啥有什麼用,注意 如果是單個的大寫字母,直接用shift...

石子問題解題報告

description 有兩堆石子,數量任意,可以不同。遊戲開始由兩個人輪流取石子。遊戲規定,每次有兩種不同的取法,一是可以在任意的一堆中取走任意多的石子 二是可以在兩堆中同時取走相同數量的石子。最後把石子全部取完者為勝者。現在給出初始的兩堆石子的數目,如果輪到你先取,假設雙方都採取最好的策略,問最...

Noip模擬題解題報告

題目鏈結 智子 cq07年省選題 區間dp 當i j時,子串明顯只需要塗色一次,於是f i j 1。當i j且s i s j 時,可以想到只需要在首次塗色時多塗一格即可,於是f i j min f i j 1 f i 1 j 當i j且s i s j 時,我們需要考慮將子串斷成兩部分來塗色,於是需要...