题解:简单的概率dp。
设dp[ i ][ j ]表示抽i个数,和为j的概率。
那么状态转移方程为:
dp[ i ] [ j ] += dp[ i - 1 ][ j - k ]*1.0/(b-a+1). (j > k).
代码:
#include<bits/stdc++.h> using namespace std; double dp[110][11000]; //dp[i][j]表示抽 i个数和为j的概率 int main() { int n,a,b,x; cin>>n>>a>>b>>x; for(int i=a;i<=b;i++){ dp[1][i]=1.0/(b-a+1); } for(int i=2;i<=n;i++){ for(int k=a;k<=b;k++){ //第i个数为 k for(int j=1;j<=x;j++){ //和为 j if(j-k>0){ dp[i][j] += dp[i-1][j-k]*1.0/(b-a+1); } } } } printf("%.4lf\n",dp[n][x]); return 0; }