[BZOJ1419]Red is good

Description

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

Input

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

Output

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

Sample Input

5 1

Sample Output

4.166666

HINT

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

 


 

 

注意此题是权限题。

设f[i][j]为有i张+1卡,j张-1卡的期望分数;

$\LARGE f[i][j]= \frac{i}{i+j}(f[i-1][j]+1)+\frac{j}{i+j}(f[i][j-1]-1)$

f[i][0]=i;

然后要滚动一下要不空间卡着。

(可以顺带着A了CODEVS5905 是男人就下一百层2333)

 


 

 

 

#include <iostream>
#include <cstdio>
using namespace std;
int n, m;
double f[2][5005];

int main()
{
    scanf("%d%d", &n, &m);
    int now = 1;
    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.0, (f[now^1][j] + 1) * (double)i / (i + j) + (f[now][j-1] - 1) * (double)j / (i + j));//最优策略 
        }
    }
    printf("%.6lf\n", f[now][m] - 5e-7);
    return 0;
}

 

posted @ 2018-07-30 19:07  zZhBr  阅读(109)  评论(0编辑  收藏  举报