hdu 4326 高斯消元

//dp[i][j]表示当前队伍中第一个人已经赢了i次,当前队伍中第j个人能赢的概率。
//答案就是dp[0][k]
//当j=1时,dp[i][j]=1/4*dp[i+1][j]+3/4*dp[1][n-2]    //该人要么赢,要么输,输的话,后面有两个人排在他后面,所以他在n-2的位置。
//当j=2时,dp[i][j]=1/4*dp[i+1][n-2]+1/4*dp[1][1]+2/4*dp[1][n-1]
//当j=3时,dp[i][j]=1/4*dp[i+1][n-1]+1/4*dp[1][n-1]+1/4*dp[1][1]+1/4*dp[1][n]
//当j=4时,dp[i][j]=1/4*dp[i+1][n]+2/4*dp[1][n]+1/4*dp[1][1];
//当j>4时,dp[i][j]=1/4*dp[i+1][j-3]+3/4*dp[1][j-3]
//另外,dp[m][1]=1,表示队伍中第一个人已经赢了m次,结束。
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define pb push_back
#define mp make_pair
#define eps 1e-9
#define zero(x) (fabs(x) PII;
#define N 12
#define M 102
int id[N][N];
double a[M][M],x[M];
int n,m,k,gg;
int equ,var;
inline void add(int xx,int y,double p)
{   if (xx==-2) return;
    if (xx==-1)
        x[y]+=p;
    else a[y][xx]-=p;

}
int gauss()
{
    int k,col,max_r;
    for(k=0,col=0;kfabs(a[max_r][col]))
            max_r=i;
        if(fabs(a[max_r][col])4)
            {   for (int i=0;i

你可能感兴趣的:(【DP】_概率DP)