zoukankan      html  css  js  c++  java
  • BZOJ1419Red is good——概率DP

    题目描述

    桌面上有R张红牌和B张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付
    出1美元。可以随时停止翻牌,在最优策略下平均能得到多少钱。

    输入

    一行输入两个数R,B,其值在0到5000之间

    输出

    在最优策略下平均能得到多少钱。

    样例输入

    5 1

    样例输出

    4.166666

    提示

    输出答案时,小数点后第六位后的全部去掉,不要四舍五入.

    算是概率dp入门题了,f[i][j]表示剩下i张红牌j张黑牌的期望收益,f[i][j]=max(0,i/(i+j)*(1+f[i-1][j])+j/(i+j)*(-1+f[i][j-1])),转移很好理解,如果期望收益小于0了,那么剩下的就都不选了。注意内存较小要滚动数组且小数不要四舍五入。

    #include<set>
    #include<map>
    #include<cmath>
    #include<stack>
    #include<queue>
    #include<cstdio>
    #include<vector>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define ll long long 
    using namespace std;
    int n,m;
    double f[3][5010];
    int main()
    {
        scanf("%d%d",&n,&m);
        int now=0;
        for(int i=1;i<=n;i++,now^=1)
        {
            f[now][0]=i;
            for(int j=1;j<=m;j++)
            {
                f[now][j]=max(0*1.0,1.0*i/(i+j)*(1+f[now^1][j])+1.0*j/(i+j)*(-1+f[now][j-1]));
            }
        }
        ll x=1000000*f[now^1][m];
        printf("%.6lf",1.0*x/1000000);
    }
  • 相关阅读:
    17. Letter Combinations of a Phone Number
    77. Combinations
    90. Subsets II
    78. Subsets
    275. H-Index II
    154. Find Minimum in Rotated Sorted Array II
    153. Find Minimum in Rotated Sorted Array
    树状数组区间查询和单点更新
    树状数组区间查询和单点更新
    最小生成树 kuangbin专题最后一个题
  • 原文地址:https://www.cnblogs.com/Khada-Jhin/p/9720463.html
Copyright © 2011-2022 走看看