給一顆\(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 時,我們需要考慮將子串斷成兩部分來塗色,於是需要...