ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

华南理工大学“三七互娱杯”程序设计竞赛 HRY and codefire(概率期望DP)

2019-04-29 20:43:55  阅读:308  来源: 互联网

标签:HRY 账号 int scanf codefire 华南理工大学 400 期望 dp


https://ac.nowcoder.com/acm/contest/874/A

题目:有两个账号 , 一开始都为0级 , 求任意一个账号升级到N的期望

要求:如果当前账号嬴了 , 就继续沿用当前的账号,否则就更换其他账号,第i级嬴的概率是pi;

 官方题解

 

因为dp[i][j] 涉及到 dp[j][i] 的价值 ,如果单纯的只是用一条式子是无法得出dp[i][j]的价值 , 应为这是从后开始计算的 , dp[j][i]还没有被计算到 ,所以必须需要两条方程 , 单纯的两条也是不行 , 因为dp[i][j]  所需要的dp[j][i] 在后面才计算出来 所以这样是不行的 , 那就需要联立方程了

#include<bits/stdc++.h>
using namespace std;
double dp[400][400],p[400];
int main()
{
    int T;scanf("%d",&T);
    while(T--)
    {
        int n;scanf("%d",&n);
        memset(dp,0,sizeof(dp));
        for(int i=1 ; i<=n ; i++)
        {
            scanf("%lf",&p[i]);
        }
        for(int i=n ; i>=1 ; i--)
        {
            for(int j=n ; j>=1 ; j--)
            {
                dp[i][j]=(p[i]*dp[i+1][j]+(1-p[i])*p[j]*dp[j+1][i]+1-p[i]+1)/(1-(1-p[i])*(1-p[j]));
                dp[j][i]=(p[j]*dp[j+1][i]+(1-p[j])*p[i]*dp[i+1][j]+1-p[j]+1)/(1-(1-p[j])*(1-p[i]));

            }
        }
        printf("%.4f\n",dp[1][1]);
    }

}
View Code

 

标签:HRY,账号,int,scanf,codefire,华南理工大学,400,期望,dp
来源: https://www.cnblogs.com/shuaihui520/p/10792688.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有