BZOJ 1419 Red is good题解(期望DP)

注意这里的最优策略指的是不知道牌的情况下平均全局最优策略,并不是每种情况拿最多。
\(f_{i,j}\) 表示要选 \(i\) 个红,\(j\) 个黑的时的最优期望,
显然有 \(f_{i,j}=\max \{0,(f_{i-1,j}+1)\cdot \frac{i}{i+j}+(f_{i,j-1}-1)\cdot \frac{j}{i+j}\}\)
当期望小于 \(0\) 时及时停止。

#include<bits/stdc++.h>
inline int read(){
	char ch=getchar();int x=0,f=1;
	for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
	for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<3)+(x<<1)+(ch^48);
	return x*f;
}
const int N=5e3+10;
int a,b;
double f[N][N];
int main(){
	// freopen("in.in","r",stdin),freopen("out.out","w",stdout);
	std::ios::sync_with_stdio(false);std::cin.tie(0),std::cout.tie(0);
	a=read(),b=read();
	int now=0;
	for(int i=0;i<=a;++i,now^=1,f[now][0]=i)
		for(int j=1;j<=b;++j)
			f[now][j]=std::max(0*1.0,(f[now^1][j]+1)*i/(i+j)+(f[now][j-1]-1)*j/(i+j));
	now^=1;
	printf("%.6lf\n",f[now][b]-5.0/1e7);
}
posted @ 2024-05-06 14:58  Ishar-zdl  阅读(46)  评论(3)    收藏  举报