对于50%的数据,n≤5. 对于100%的数据,n≤100,b≤100.
dp[i][j]表示选择i个数,结果为j的概率;递推方程:dp[i][j]+=dp[i-1][j-k]*p;(a<=k<=b),p为选出一个数的概率
代码:
#include<cstring>
#include<algorithm>
using namespace std;
double dp[101][10001]={0};
int main()
{
int n,a,b,x;
scanf("%d%d%d%d",&n,&a,&b,&x);
double p=1.0/(b-a+1);
for(int i=1;i<=n;i++)
{
int t=min(i*b,x);
for(int j=i*a;j<=t;j++)
{
if(i==1)
dp[i][j]=p;
else
{
for(int k=a;k<=b;k++)
{
if(k<=j)
dp[i][j]+=dp[i-1][j-k]*p;
}
}
}
}
printf("%.4lf\n",dp[n][x]);
}