對於任意一對位置x,y我們可以找到聰聰的行走方案。(這個可以bfs跑)然後我們用f[x,y]表示聰聰在x,可可在y抓住的期望時間,於是轉移方程是:
記憶化搜尋轉移。if(x==y)f[x][y]=0,
if(x走兩步能到y)f[x][y]=1,
else
f[x][y]=(sigma(f[x_nxtpos][y_nxtpos])+1)/(d[y]+1);
#includeusing namespace std;
const int n=1e3+2,m=2e3+2;
const int inf=0x3f3f3f3f;
int d[n],n,m,c,t;
int hed[n],nxt[m],to[m],cnt;
inline void adde(int u,int v)
queueq;
int going[n][n];
bool vis[n];
int dis[n];
inline void bfs(int s)
vis[s]=true;
while(!q.empty())
else going[s][v]=min(going[s][u],going[s][v]);}}
}double f[n][n];
double dp(int x,int y)
int main()
for(int i=1;i<=n;i++)
bfs(i);
double ans=dp(c,t);
printf("%.3lf\n",ans);
}
bzoj 1415 聰聰和可可 期望
可以先預處理出當聰聰在 i 點,可可在 j 點時,聰聰下一步到達的點的編號,記為p i,j bfs即可。設f i,j 表示聰聰在 i,可可在 j 時的期望步數,w i,j 為與i相鄰的第 j 個點編號,t i 為 i 點的度數,則有f i,j t i k 1f p p i j j w j,k f p...
BZOJ 1415 聰聰和可可 期望DP
我們可以用n次bfs預處理出 to陣列,to i j 表示聰聰從i點到j點第一步會走哪個點。那麼對於聰聰在i點,可可在j點,聰聰先走,定義dp i j 表示步數期望。那麼顯然有dp i j sigma dp p w dp p j dee j 1 1.其中p表示to to i j j w表示j點鄰接的...
BZOJ1415 Noi2005 聰聰和可可
資料的第1行為兩個整數n和e,以空格分隔,分別表示森林中的景點數和連線相鄰景點的路的條數。第2行包含兩個整數c和m,以空格分隔,分別表示初始時聰聰和可可所在的景點的編號。接下來e行,每行兩個整數,第i 2行的兩個整數ai和bi表示景點ai和景點bi之間有一條路。所有的路都是無向的,即 如果能從a走到...