这个题….
二维dp分情况不多bb
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
double dp[1001][1001];
double bj[1001][1001];
void dfs(int tt, int dd)
{
if (bj[tt][dd])return;
bj[tt][dd] = 1;
if (tt % 2)return;
if (dd == 0)
{
dfs(tt - 2, dd);
dp[tt][dd] = (tt - 1)*dp[tt - 2][dd] / (tt + 1);
return;
}
if (tt == 0)
{
dfs(tt, dd - 1);
dp[tt][dd] = dp[tt][dd-1];
return;
}
/*if (dd == 1)
{
dfs(tt, dd - 1);
dfs(tt - 2, dd);
dp[tt][dd] = (tt*(tt - 1)*dp[tt - 2][dd] + dp[tt][dd - 1]) / ((tt + 2)*(tt + 1) - 1);
return;
}*/
dfs(tt - 2, dd);
dfs(tt, dd - 1);
dp[tt][dd] = (tt*(tt - 1)*dp[tt - 2][dd] + dd*(2 * tt + 1)*dp[tt][dd - 1]);
dp[tt][dd] /= (tt + dd + 1)*(tt + dd)*1.0 - dd*dd*1.0;
}
int main()
{
int T;
cin >> T;
dp[0][0] = 1;
bj[0][0] = 1;
int n,u=0,t,d;
while (T--)
{
scanf("%d%d", &t, &d);
dfs(t, d);
printf("Case %d: %.10f\n", ++u, dp[t][d]);
}
}