102 条题解

  • -2
    @ 2023-3-23 21:29:06
    using namespace std;
    const int N=1000;
    int n,s;
    double dp[N+5][N+5];
    double dfs(int i,int j){
    	if(i==n&&j==s) return 0;
    	if(dp[i][j]!=0) return dp[i][j];
    	dp[i][j]=1;
    	if(i+1<=n) dp[i][j]+=dfs(i+1,j)*(n-i)*1.0*j/(n*s);
    	if(j+1<=s) dp[i][j]+=dfs(i,j+1)*i*(s-j)/(1.0*n*s);
    	if(i+1<=n&&j+1<=s) dp[i][j]+=dfs(i+1,j+1)*(n-i)*1.0*(s-j)/(n*s);
    	dp[i][j]/=(1.0-i*j*1.0/(n*s));
    	return dp[i][j];
    }
    int main(){
    	scanf("%d%d",&n,&s);
    	printf("%.4lf\n",dfs(0,0));
    	return 0;
    }
    

    信息

    ID
    1
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    843
    已通过
    300
    上传者