8
20
2016
0

[BZOJ1419] Red is good

设$dp[i][j]$为有i张红j张黑时的期望最大值

因为随时可以停止所以当期望小于0时直接改成0

同时因为会爆空间所以改成滚动数组

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;

const int N=5005;

int R,B;
double dp[2][N];

inline void Read(int &x){
char ch;
while((ch=getchar())<'0' || ch>'9');
x=ch-'0';
while((ch=getchar())>='0' && ch<='9')x=x*10+ch-'0';
}

int main(){
freopen("1419.in","r",stdin);
freopen("1419.out","w",stdout);
Read(R);Read(B);
for(register int i=1;i<=R;i++){
	int now=i&1,pre=now^1;
	dp[now][0]=i;
	for(register int j=1;j<=B;j++){
		double Px=1.0*i/(i+j);
		dp[now][j]=Px*(dp[pre][j]+1)+(1-Px)*(dp[now][j-1]-1);
		if(dp[now][j]<0)dp[now][j]=0;
	}
}
printf("%.6lf\n",dp[R&1][B]-0.0000005);
return 0;
}
Category: BZOJ | Tags: OI bzoj | Read Count: 418

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

Host by is-Programmer.com | Power by Chito 1.3.3 beta | Theme: Aeros 2.0 by TheBuckmaker.com