传送门: http://www.lydsy.com/JudgeOnline/problem.php?id=1419
题意: 桌面上有
R
张红牌和
题解: 设
f[i][j]
是有
i
张红牌,
#include<bits/stdc++.h>
const int N = 5e3 + 5;
int R, B, last, now;
double f[2][N];
void cmax(double &a, double b) {if (b > a) a = b;}
int main() {
scanf("%d%d", &R, &B);
last = 0, now = 1;
for (int i = 1; i <= R; i++, last ^= 1, now ^= 1) {
memset(f[now], 0, sizeof(f[now])); f[now][0] = i;
for (int j = 1; j <= B; j++)
cmax(f[now][j], ((f[last][j] + 1) * i + (f[now][j - 1] - 1) * j) / (i + j));
}
printf("%.6f\n", ((int)(f[last][B] * 1e6)) / 1e6);
return 0;
}