蓝桥杯 算法提高-概率计算(概率dp)

题目

题解

dp[i][j]代表前i个数和为j的概率,用均匀分布转移即可

卡1e8刚刚好叭应该是

这种简单的代码 想不到dp数组的构造含义 真是菜啊

代码

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
double dp[105][10005];
int n,a,b,x;
int mn,mx;
double p;
int main()
{
	scanf("%d%d%d%d",&n,&a,&b,&x);
	p=1.0/(b-a+1);
	mn=a;mx=b;
	for(int i=mn;i<=mx;++i)
	dp[1][i]=p;
	for(int i=1;i<=n-1;++i)
	{
		for(int j=mn;j<=mx;++j)
		{		
		   for(int k=a;k<=b;++k)
		   dp[i+1][j+k]+=dp[i][j]*p;
		}
		mn+=a;mx+=b;
	}
	printf("%.4lf\n",dp[n][x]);
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/Code92007/article/details/88691678