Codeforces 518D Ilya and Escalator

http://codeforces.com/problemset/problem/518/D

题意:n个人,每秒有p的概率进电梯,求t秒后电梯里人数的期望

考虑dp:f[i][j]代表第i秒有j个人的概率,f[0][0]=1,f[i][j]=f[i-1][j-1]*p+f[i-1][j]*(1-p),特别有:f[i][n]=f[i-1][n]+f[i-1][n-1]*p

 1 #include<cstdio>
 2 #include<cmath>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<iostream>
 6 double p,f[2005][2005];
 7 int n,t;
 8 int read(){
 9     int t=0,f=1;char ch=getchar();
10     while (ch<‘0‘||ch>‘9‘){if (ch==‘-‘) f=-1;ch=getchar();}
11     while (‘0‘<=ch&&ch<=‘9‘){t=t*10+ch-‘0‘;ch=getchar();}
12     return t*f;
13 }
14 int main(){
15     double p;
16     n=read();scanf("%lf",&p);t=read();
17     f[0][0]=1;
18     for (int i=1;i<=t;i++){
19      for (int j=0;j<n;j++)
20       f[i][j]=f[i-1][j]*(1-p)+f[i-1][j-1]*p;
21      f[i][n]=f[i-1][n]+f[i-1][n-1]*p;
22     }
23     double ans=0;
24     for (int i=1;i<=n;i++)
25      ans+=f[t][i]*i;
26     printf("%.6f\n",ans);
27     return 0;
28 }
时间: 2024-11-07 11:51:14

Codeforces 518D Ilya and Escalator的相关文章

Codeforces 518D Ilya and Escalator (概率dp)

Ilya and Escalator time limit per test: 2 seconds memory limit per test: 256 megabytes Ilya got tired of sports programming, left university and got a job in the subway. He was given the task to determine the escalator load factor. Let's assume that

codeforces Problem-518D:Ilya and Escalator(概率dp)

传送门 题意:一共有n个人排着队,排在队首的人每一秒有p的概率上车,求过了t秒后车内的人数的期望值. 题解:用dp[i][j]表示第i秒有j个人的概率,状态转移方程为:dp[i][j]=p*dp[i-1][j-1]+(1-p)*dp[i-1][j](i<n),dp[i][j]=p*dp[i-1][j-1]+dp[i-1][j](i==n); AC代码: #include <bits/stdc++.h> using namespace std; const int maxn=2e3+4;

Codeforces Round #293 (Div. 2) D. Ilya and Escalator (概率DP)

dp[i][j]表示第i秒电梯进去的人数为j时的概率.由于概率比较好求,而且这里的样本是有限个.所以可以先求出概率,然后用公式转化成期望. #include <iostream> #include <string.h> #include <math.h> #include <queue> #include <algorithm> #include <stdlib.h> #include <map> #include <

Codeforces Round #293 (Div. 2) D. Ilya and Escalator

先求出概率 设 \(f_{i,j}\) 表示第 \(i\) 秒电梯上有 \(j\) 个人的概率 则 \(f_{0,0}=1\) \(f_{i + 1, j + 1} = f_{i, j} \times p\) \(f_{i + 1, j} = f_{i, j} \times (1 - p)\) \(f_{i+1,n}=f_{i,n}\) 答案即为 \(\sum f_{t, i} \times i\) #include <bits/stdc++.h> #define pb push_back #

CF 518 D. Ilya and Escalator

Ilya got tired of sports programming, left university and got a job in the subway. He was given the task to determine the escalator load factor. Let's assume that n people stand in the queue for the escalator. At each second one of the two following

CodeForces - 754B Ilya and tic-tac-toe game

简单搜索 判断是否能在最后一步下棋得到胜利 问题转化为 是否有可以胜利的x的摆法 那么就只有两种情况 1.有两个x相连 并且 在端点还有.可以落子 那么就可以在最后一步 胜利 2.两个x中间恰好有一个.空着 那么可以再这里落子胜利 搜索这两种情况 存在则胜利 不存在 则无法再最后一步胜利 1 #include <iostream> 2 #include <stdio.h> 3 #include <string> 4 #include <string.h> 5

Codeforces 525C Ilya and Sticks

题意:给你n条线段,问你这些线段可以组成的矩形和最大是多少.每条线段可以-1,. 解题思路:贪心. 解题代码: 1 // File Name: d.cpp 2 // Author: darkdream 3 // Created Time: 2015年03月27日 星期五 16时05分31秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #include<set> 9 #include<d

bfs codeforces 754B Ilya and tic-tac-toe game

这题简直把我坑死了 所有的坑都被我中了 题意: 思路:bfs or 模拟 模拟似乎没有什么坑 但是bfs真的是坑 AC代码: 1 #include "iostream" 2 #include "string.h" 3 #include "stack" 4 #include "queue" 5 #include "string" 6 #include "vector" 7 #include

Codeforces 557A Ilya and Diplomas 区间选数

题意:给出3个区间 [L1,R1],[L2,R2],[L3,R3] 和正整数n,要求在3个区间内各选一个正整数,使得选出来的数之和为n.如果有多种选法,取从第一个区间内选出的数最大的选法.如果仍有多种选法,取从第二个区间中选出的数最大的选法,如果仍有多种选法,取从第三个区间内选出的数最大的选法.题目保证至少存在一种选法. 水题.要使第一个区间内选出的数尽量大,意思就是尽量让后两个区间选出的数尽量小,最小可以取到区间下界.于是第一个区间选的数ans1 = min(R1,n - L2 - L3).同