期望dp。定义状态一般都是倒着来?。。。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 5050 #define eps 1e-7 using namespace std; int n,m; double dp[2][maxn]; int main() { scanf("%d%d",&n,&m); for (int i=1;i<=n;i++) { dp[i&1][0]=i; for (int j=1;j<=m;j++) dp[i&1][j]=max(0.0,(double)i/(i+j)*(dp[(i&1)^1][j]+1)+(double)j/(i+j)*(dp[i&1][j-1]-1)); } printf("%.6lf ",dp[n&1][m]-5.0*eps); return 0; }