爆0求助
  • 板块AT_dp_j Sushi
  • 楼主JackHu0117
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/8/25 15:17
  • 上次更新2023/11/3 01:17:56
查看原帖
爆0求助
647952
JackHu0117楼主2023/8/25 15:17
#include<bits/stdc++.h>
using namespace std;
int n;int s;
double dp[310][310][310];
double dfs(int a,int b,int c){
	if(!a && !b && !c) return 0;
	if(dp[a][b][c]!=0){
		return dp[a][b][c];
	}
	double ans;
	ans=n/(a+b+c);
	if(a) ans+=dfs(a-1,b,c)*(a/(a+b+c));
	if(b) ans+=dfs(a+1,b-1,c)*(b/(a+b+c));
	if(c) ans+=dfs(a,b+1,c-1)*(c/(a+b+c));
	return dp[a][b][c]=ans;
}
int main(){
	cin>>n;
	int a,b,c;
	for(int i=0;i<n;i++){
		cin>>s;
		if(s==1) a++;
		else if(s==2) b++;
		else c++;
	}
	double ans=dfs(a,b,c);
	printf("%.10f\n",ans);
	return 0;
}

输出清一色的0.0000000000

2023/8/25 15:17
加载中...