#include <stdio.h> double dp[101][100*100+1];//Max_n,Max_(n*b) int main(){ int n,a,b,x,i,j,k; scanf("%d%d%d%d",&n,&a,&b,&x); if(x < n*a || x > n*b) printf("0.0000\n"); else{ //initial for(i=2;i<=n;i++) for(j=i*a;j<=i*b;j++) dp[i][j] = 0.0; for(j=a;j<=b;j++) dp[1][j] = 1.0/(b-a+1); for(i=1;i<n;i++) for(j=i*a;j<=i*b;j++) for(k=a;k<=b;k++) dp[i+1][j+k] += dp[i][j]*1.0/(b-a+1); printf("%.4lf\n",dp[n][x]); } return 0; }
参考:http://blog.csdn.net/go_accepted/article/details/57105651
原文:http://www.cnblogs.com/520xiuge/p/6444050.html