lightoj 1050 - Marbles 概率DP

来源:互联网 发布:淘宝内部券公众号 编辑:程序博客网 时间:2024/06/06 06:32

俩人玩游戏,共有r个红球b个蓝球,先手可能拿个红色也可能拿个蓝色,后手必然蓝色。如果后手不能拿到蓝色(没了)且红色有剩余就是先手输,最后一个拿到的是蓝色且红色没了先手赢。问先手赢的概率。

我概率dp很烂,基本没学,但是看到这个题有个猜想。每次拿两个球当做一轮,按照第几轮去推导。

那么先手这一轮拿红色的概率是由上一轮的dp[r-1][b-1](后手拿蓝),或者先手拿蓝后手也拿蓝就是dp[r][b-2]..

只要红色没了 先手赢的概率就是1...

我就试试写..过样例了,交一发TLE..

T好大,而且答案是固定的..打表之 AC了.

#include<bits/stdc++.h>using namespace std;#define ll long long#define N 1005double dp[502][502];int main(){    memset(dp,0,sizeof(dp));    dp[0][1]=1.0;    for(int i=1; i<=500; i++)    {        for(int j=1; j<=500; j++)        {            dp[0][j]=1.0;            dp[i][j]=1.0*i/(i+j)*dp[i-1][j-1]+1.0*j/(i+j)*dp[i][j-2];        }    }    int t;    scanf("%d",&t);    for(int cas=1; cas<=t; cas++)    {        int r,b;        scanf("%d %d",&r,&b);        printf("Case %d: %.7f\n",cas,dp[r][b]);    }    return 0;}


0 0