1. 程式人生 > >演算法提高 概率計算

演算法提高 概率計算

#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;
}