1. 程式人生 > >【51NOD1398】等公交

【51NOD1398】等公交

題面

小鎮的公交車站裡有N輛公交,標號為0,1,2,...,N-1。這個小鎮的公交運作模式比較奇葩,當必須有一輛車離開車站時,系統會隨機從N輛車中選擇一輛車,其中任意一輛車i被選中的概率為probi/100,當車i被選中後它會離開車站,並且在之後的timei的時間內完成它的行程並返回車站。然後系統又開始隨機選N輛車之一(存在同一輛車被連續多次選中的可能)。這個車站在0時刻發出第一班車。如果你在s時刻到達車站,且一定搭乘下一班車,那麼你等待的時間的期望是多少? 

分析

很裸的概率dp,其他沒啥說的,統計答案這的意思是等待這麼長時間的概率*時間

程式碼

#include<bits/stdc++.h>
using
namespace std; #define N 200020 int T,n,s,t[N]; double p[N],dp[N],ans; int main() { scanf("%d",&T); while(T--) { memset(dp,0,sizeof(dp));ans=0; scanf("%d%d",&n,&s); for(int i=1;i<=n;i++) scanf("%d%lf",&t[i],&p[i]),p[i]/=100.0; dp[
0]=1; for(int i=0;i<s;i++) for(int j=1;j<=n;j++) dp[i+t[j]]+=dp[i]*p[j]; for(int i=s+1;i<N;i++) ans+=(i-s)*dp[i]; printf("%.4lf\n",ans); } return 0;