演算法提高 概率計算
阿新 • • 發佈:2019-02-07
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; double dp[110][10000]; //dp[i][j]表示i個數的和為j的時候的概率 int main() { int n,a,b,x; while(~scanf("%d%d%d%d",&n,&a,&b,&x)) { memset(dp,0,sizeof(dp)); //初始化 for(int i=a; i<=b; i++) dp[1][i] = 1.0/(b-a+1); // i個數 for(int i=2; i<=n; i++) { //第i個數為j的時候 for(int j=a; j<=b; j++) { //和為k的時候 for(int k=1; k<=x; k++) { //表示可以獲得k值的情況 if (k-j>0) dp[i][k] += dp[i-1][k-j]*1.0/(b-a+1); } } } printf("%.4lf\n",dp[n][x]); } return 0; }