似乎有这么一回事...
查看原帖
似乎有这么一回事...
376235
了始开移蓝楼主2022/3/4 21:05

有这样两段代码,其中Fi,kF_{i,k}指在i i\space秒后电梯内有k k\space人的概率

#include <bits/stdc++.h>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
const int C1=2010;
const int C2=2010;
int n,T;
double p;
double F[C1][C2];
double ans=0.0;
int main(int argc, char** argv) {
	scanf("%d%lf%d",&n,&p,&T);
	cin>>n>>p>>T;
	F[0][0]=1.0;
	for(int i=1;i<=T;i++)
		for(int j=i+1;j<=n;j++)
			F[i][j]=0.0;
	for(int i=1;i<=T;i++)
	{
		F[i][0]=F[i-1][0]*(1.0-p);
		for(int j=1;j<n;j++)
		{
			if(j>i)
				break;
			F[i][j]=F[i-1][j]*(1.0-p)+F[i-1][j-1]*p;
		}
		if(n>i)
			continue;
		F[i][n]=F[i-1][n]+F[i-1][n-1]*p;
	}
	for(int i=0;i<=n;i++)
		ans+=F[T][i]*i;
//	cout<<fixed<<setprecision(6)<<ans;
	printf("%lf",ans);
//	cout<<ans;
	return 0;
}

//AC Code
#include <bits/stdc++.h>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
const int C1=2010;
const int C2=2010;
int n,T;
double p;
double F[C1][C2];
double ans=0.0;
int main(int argc, char** argv) {
	scanf("%d%lf%d",&n,&p,&T);
//	cin>>n>>p>>T;
	F[0][0]=1.0;
	for(int i=1;i<=T;i++)
	{
		F[i][0]=F[i-1][0]*(1.0-p);
		for(int j=1;j<n;j++)
			F[i][j]=F[i-1][j]*(1.0-p)+F[i-1][j-1]*p;
		F[i][n]=F[i-1][n]+F[i-1][n-1]*p;
	}
	for(int i=0;i<=n;i++)
		ans+=F[T][i]*i;
//	cout<<fixed<<setprecision(6)<<ans;
	printf("%lf",ans);
//	cout<<ans;
	return 0;
}

//WA Code

现在是我的问题:是否预先赋值 时间小于人数的F值为0 的区别是什么

2022/3/4 21:05
加载中...