第一行输入两个正整数和.
第二行输入个整数.
输出一个小数表示长度期望.在<1e-8范围内都视为正确输出.
5 5 5 5 5 5 5
1.0000000000
2 4 1 1 1 1
1.2500000000
2 2 1 1
1.5000000000
// copy 别人的代码 #include<bits/stdc++.h> using namespace std; typedef long long ll; int n,m; int a[56]; double dp[56][56][56]; double C[56][56]; int main() { cin>>n>>m; C[0][0] = 1.0; for(int i=1;i<=55;i++) { C[i][0] = 1.0; for(int j=1;j<=i;j++) { C[i][j] = (i-j+1)*C[i][j-1]/j; } } for(int i=1;i<=m;i++) cin>>a[i]; for(int i=0;i<=n;i++) dp[0][0][i] = i; for(int i=1;i<=m;i++) { for(int j=0;j<=n;j++) { for(int k=0;k<=n;k++) { for(int c=0;c<=j;c++) { int Max = max(k,(c+a[i]-1)/a[i]); dp[i][j][k] += dp[i-1][j-c][Max] * pow(i-1,j-c) / pow(i,j) * C[j][c]; } } } } printf("%.10f\n",dp[m][n][0]); return 0; }