求帮忙交cf题
  • 板块灌水区
  • 楼主zzyaba
  • 当前回复5
  • 已保存回复5
  • 发布时间2025/1/16 19:24
  • 上次更新2025/1/16 22:53:51
查看原帖
求帮忙交cf题
360025
zzyaba楼主2025/1/16 19:24

题目

#include<bits/stdc++.h>
using namespace std;
int n,t,cnt,vis[262144];
double a[19][19],dp[262144];
queue<int>q;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>a[i][j];
		}
	}
	dp[(1<<n)-1]=1;
	q.push((1<<n)-1);
	while(q.size()){
		t=q.front();
		q.pop();
		cnt=0;
		for(int i=1,j=1;i<=n;i++,j<<=1){
			if(t&j){
				cnt++;
			}
		}
		cnt=cnt*(cnt-1);
		for(int i=1,j=1;i<=n;i++,j<<=1){
			if(t&j){
				for(int k=1,l=1;k<=n;k++,l<<=1){
					if(t&l&&j!=l){
						dp[t^j]+=dp[t]*a[k][i]/cnt;
						dp[t^l]+=dp[t]*a[i][k]/cnt;
						if(!vis[t^j]){
							vis[t^j]=1;
							q.push(t^j);
						}
						if(!vis[t^l]){
							vis[t^l]=1;
							q.push(t^l);
						}
					}
				}
			}
		}
	}
	for(int i=1;i<=n;i++){
		printf("%.6lf ",dp[1<<i-1]);
	}
}
2025/1/16 19:24
加载中...