【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;
“Make my parents proud,and impress the girl I like.”