题目:
思路:
一开始直接朝着概率论的方向去了,万万没想到是道dp
基本就是把这道题换了个题面
考虑状态转移方程dp[i][j]
表示剩下i个蓝球和j个红球的时候,最后剩下两个相同的球的概率
dp[i][j]=dp[i-1][j]*0.5+dp[i][j-1]*0.5
如果某一种球的数量=0且另一种的球的数量大于等于2,那么dp[i][0]=0
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define LL long long int
using namespace std;
double dp[2000][2000];
int main()
{
int n;
scanf("%d",&n);
n/=2;
for(int i=2;i<=n;i++)
dp[i][0]=dp[0][i]=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
dp[i][j]=(dp[i-1][j]+dp[i][j-1])*0.5;
printf("%.4lf\n",dp[n][n]);
return 0;
}