2019南京網路賽 D Robots 期望dp

2022-03-28 17:01:58 字數 1421 閱讀 6057

題目傳送門

題意:給出一幅有向無環圖,保證只有1入度為0,n出度為0,求問乙個機械人從1出發,每天等概率的走到相鄰點或者留在原地,問到達n點的代價。每天的代價都不一樣,就是天數(第x天走一步的代價就是x)。

思路:設出度每個點的選擇情況為$cnt[i]$,即出度加1.

由於每天的代價和天數有關,所以應該要想到,可以先算出天數的期望。這樣就可以得到每個點的代價,再算總的代價期望。

把一道題拆成兩題,簡單求解。

$dp[u]=dp[u]*\frac+\frac* \sum dp[v]+1$

移項可得 $dp[u]=\frac\sum dp[v]+\frac$

然後求f

$f[u]=\fracf[u]+\frac*\sum f[v] +dp[u]$

$f[u]=\frac\sum f[v]+\frac*dp[u]$

然後按照拓撲序的逆序來dp。

#pragma gcc optimize (2)

#pragma g++ optimize (2)

#pragma comment(linker, "/stack:102400000,102400000")#include

#include

#define rep(i,a,b) for(int i=a;i<=b;++i)

#define dep(i,b,a) for(int i=b;i>=a;--i)

#define clr(a,b) memset(a,b,sizeof(a))

#define pb push_back

#define pii pairusing

namespace

std;

typedef

long

long

ll;ll rd()

while(ch>='

0'&&ch<='9')

return x*f;

}const

int maxn=400010

;const

int inf=0x3f3f3f3f

;int

n,m;

double

dp[maxn],f[maxn];

double

cnt[maxn];

intto[maxn],tot,dep[maxn];

vector

ve[maxn];

void

topo()}}

}int

main()

rep(i,

1,m)

topo();

for(int i=tot-1;i>0;--i)

}for(int i=tot-1;i>0;--i)

}printf(

"%.2f\n

",f[1

]); }

}

2019 南京網路賽 B F H

其實這場我爆零了,都是隊友a的題,現在滾過來補題了。可補題 a先欠著 這個題運用了擴充套件尤拉降冪 於是我o n 的去求每一層的底數和冪數?成功超時。然後搜題解 waht?類似減了一下枝就可以了?當時隊友告訴我用什麼快速冪套快速冪?這種題可以快速冪套快速冪?成功被隊友帶歪,怎麼說呢,自己也菜,隊友也...

2019南京網路賽 B robots

給乙個 dag dagda g,乙個機械人從 1 11 走到 n nn 每一步會等概率走向某乙個後繼或不動,每一步 包括不動 的花費是當前的步數。求從起點走到終點的期望花費期望。期望 dp。f u f u f u 表示從 u uu 出發的期望步數,g u g u g u 表示從 u uu 出發的期望...

2019 南京網路賽 Robots

1.做這個題目之前,首先可以做一下綠豆蛙的歸宿 這道題目。二者幾乎一樣。其實二者的核心思想都是倒著推期望,為什麼會倒著推?其實也有很多種解釋,有句話說得很好,其實就是詮釋了為什麼期望要倒著dp。終點是概率的結束,是期望的開始。2.綠豆蛙的歸宿 解釋一下就是當前節點的值由所有和它相連的節點的值貢獻而來...