【题解】red is good

// 设f[i][j]表示有i张红牌,j张黑牌的最优策略的期望。
#include<bits/stdc++.h>
using namespace std;
long long r,b;
double f[5001][5001];
int main(){
    scanf("%lld%lld",&r,&b);
    f[1][0]=1;
    f[0][1]=0;
    for(long long i=1;i<=r;i++){
        f[i][0]=i;
        for(long long j=1;j<=b;j++){
            f[i][j]=max(0.0,(double)(f[i-1][j]+1)*(double)(i/(double)(i+j))+(double)(f[i][j-1]-1)*(double)(j/(double)(i+j)));
            //f[i-1][j]*(i/i+j)表示当前这一张为r
            //f[i][j-1]*(j/i+j)表示当前这一张为b
        }
    }
    double ans=f[r][b];
    ans*=1000000;
    ans=(long long)ans;
    printf("%lf",ans/1000000);
}
posted @ 2022-03-25 20:11  zswangziye  阅读(12)  评论(0编辑  收藏  举报