【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;

猜你喜欢

转载自www.cnblogs.com/NSD-email0820/p/9928308.html