题目链接:https://codeforces.com/contest/28/problem/C
#include <iostream>
#include <algorithm>
using namespace std;
typedef long double db;
static const int MAXN=50+10;
db dp[MAXN][MAXN][MAXN];
int a[MAXN];
db C[MAXN][MAXN];
int n,m;
void init()
{
C[0][0]=1;
for(int i=1;i<=50;i++)
for(int j=0;j<=i;j++) C[i][j]=C[i-1][j]+C[i-1][j-1];
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++) scanf("%d",&a[i]);
init();
dp[0][0][0]=1;
for(int i=1;i<=m;i++)
for(int j=0;j<=n;j++)
for(int k=0;k<=j;k++)
for(int l=0;l<=n-j;l++)
dp[i][j+l][max((l+a[i]-1)/a[i],k)]+=dp[i-1][j][k]*C[n-j][l];
db tmp1=0,tmp2=0;
for(int i=0;i<=n;i++)
{
tmp1+=dp[m][n][i];
tmp2+=dp[m][n][i]*i;
}
printf("%.12Lf\n",tmp2/tmp1);
return 0;
}