思路:马尔可夫过程,转为求解方程组:每一种状态有一个概率,把概率转移方程列出来,用高斯消元法求解。
由于一共有2^n-2个方程,n最大为15,高斯消元法解方程是三次方的,无法通过极限数据。方程组是稀疏的,不知道要怎么优化。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<queue>
#include<math.h>
#include<vector>
#include<iostream>
using namespace std;
#define N 15
#define pw(x) (1<<x)
int n,m;
double a[1<<N][N+1]; //
double p[N+1][N+1];
vector<int> qry;
int read(){
scanf("%d%d",&n,&m);
for (int i=1;i<n;i++)
for (int j=i+1;j<=n;j++){
scanf("%lf",&p[i][j]);
p[j][i]=1.0-p[i][j];
}
for (int i=1;i<=m;i++){
int S=0;
for (int j=1;j<=n;j++){
int k;
scanf("%d",&k);
if(k)S+=pw(j-1);
}
qry.pus