[BZOJ1419]Red is good
Description
桌面上有R张红牌和B张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付
出1美元。可以随时停止翻牌,在最优策略下平均能得到多少钱。
Input
一行输入两个数R,B,其值在0到5000之间
Output
在最优策略下平均能得到多少钱。
Sample Input
5 1
Sample Output
4.166666
HINT
输出答案时,小数点后第六位后的全部去掉,不要四舍五入.
注意此题是权限题。
设f[i][j]为有i张+1卡,j张-1卡的期望分数;
$\LARGE f[i][j]= \frac{i}{i+j}(f[i-1][j]+1)+\frac{j}{i+j}(f[i][j-1]-1)$
f[i][0]=i;
然后要滚动一下要不空间卡着。
(可以顺带着A了CODEVS5905 是男人就下一百层2333)
#include <iostream> #include <cstdio> using namespace std; int n, m; double f[2][5005]; int main() { scanf("%d%d", &n, &m); int now = 1; for (int i = 1 ; i <= n; i++) { now ^= 1; f[now][0] = i; for (int j = 1; j <= m; j++) { f[now][j] = max(0.0, (f[now^1][j] + 1) * (double)i / (i + j) + (f[now][j-1] - 1) * (double)j / (i + j));//最优策略 } } printf("%.6lf\n", f[now][m] - 5e-7); return 0; }