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;
double dp[maxn][maxn];
int main()
{
    int n,t;
    double p;
    scanf("%d%lf%d",&n,&p,&t);
    dp[0][0]=1;
    for(int i = 1;i <= t;++i)
    {
        for(int j = 0;j <= n;++j)
        {
            if(j==n)
            dp[i][j]+=dp[i-1][j];
            else
            dp[i][j]+=(1-p)*dp[i-1][j];
            if(j)
            dp[i][j]+=dp[i-1][j-1]*p;
        }
    }
    double ans=0;
    for(int i = 1;i <= n;++i){
        ans+=i*dp[t][i];
    }
    printf("%.7lf\n",ans);
    return 0;
}

原文地址:https://www.cnblogs.com/aaddvvaanntteezz/p/11026806.html

时间: 2024-11-07 11:51:22

codeforces Problem-518D:Ilya and Escalator(概率dp)的相关文章

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 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 235B Let&#39;s Play Osu! (概率dp求期望+公式变形)

B. Let's Play Osu! time limit per test:2 seconds memory limit per test:256 megabytes You're playing a game called Osu! Here's a simplified version of it. There are n clicks in a game. For each click there are two outcomes: correct or bad. Let us deno

codeforces 235B Let&#39;s Play Osu! 概率dp

题意:给定n表示有n个格子,下面每个格子为O的概率是多少.对于一段连续 x 个O的价值就是 x^2 ;求获得的价值的期望是多少. 思路:n^2=n×(n-1)+n,设ai为第i段连续O的长度,∑ai^2 = ∑[ ai+ ai*(ai-1) ] = ∑ ai*(ai-1) + ∑ai = ∑ C(ai, 2)*2 + ∑ai,那么问题可以转 化为求长度大于1的连续段数*2+O的个数的总期望. ∑ai我们可以理解为O的总个数,所以它的期望为∑pi: C(ai, 2)*2我们可以认 为是连续ai个O

Codeforces 235B Let&#39;s Play Osu! 概率dp(水

题目链接:点击打开链接 给定n表示有n个格子 下面每个格子为O的概率是多少. 对于一段连续 x 个O的价值就是 x*x ; 问: 获得的价值的期望是多少. 思路: 把公式拆一下.. #include <cstdio> const int N = 100005; double dp[N][2], p[N]; int main(){ int n; scanf("%d", &n); for(int i = 1; i <= n; i ++) { scanf("

Codeforces Div.301D Bad Luck Island(概率dp+记忆化搜索)

一道概率dp问题. 题目链接:http://codeforces.com/contest/540/problem/D 题目大意:一个岛上有r个石头,s个剪子,p个布,他们之间随机挑出两个相遇,如果不是相同物种,就会有一个消失,分别求出最后这座岛上只剩下一个物种的概率. 我们用dp[i][j][k]来存储i个石头,j个剪刀,k个布时,某物种的存活概率,共dp三次,算出三个物种分别的概率. 首先,我们需要把对应想求的物种概率初始化,这里以石头为例,那么对于i从1到r,不难理解dp[i][0][0]=

Codeforces 167B Wizards and Huge Prize 概率dp(水

题目链接:点击打开链接 题意: 给定n个对手,至少要击败其中 l 个人,现在有口袋容量为 k 下面n个数字表示击败这个人的概率 下面n个数字(若为-1表示击败这个人可以获得一个金币,若>0则表示可以增加口袋容量为这个数字) 问: 至少击败其中的l个人,且获得的总口袋容量 >= 获得的金币个数 的概率是多少.(即任何时候金币都不能放不下) 思路: 概率dp 要注意的是有可能口袋容量是负数,但最后的时候变成了正数,所以要给口袋容量都+N, #include <iostream> #in

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<algor

Codeforces 148D Bag of mice:概率dp 记忆化搜索

题目链接:http://codeforces.com/problemset/problem/148/D 题意: 一个袋子中有w只白老鼠,b只黑老鼠. 公主和龙轮流从袋子里随机抓一只老鼠出来,不放回,公主先拿. 公主每次抓一只出来.龙每次在抓一只出来之后,会随机有一只老鼠跳出来(被龙吓的了...). 先抓到白老鼠的人赢.若两人最后都没有抓到白老鼠,则龙赢. 问你公主赢的概率. 题解: 表示状态: dp[i][j] = probability to win(当前公主先手,公主赢的概率) i:剩i只白