概率dp加方程

#define eps 1e-6
const int maxn=200;
double g[maxn][maxn];
double x[maxn][maxn];

void add(int row,int col,double v)
{
	if(){} //特殊值
	g[row][col]+=v;
}

void gg(int r,int c)
{
	int row,col;
	
	for(row=1,col=1;row<r;row++,col++)
	{
		int t=row;
		for(int i=row+1;i<=r;i++)
			if(fabs(g[i][col])>fabs(g[t][col]))t=i;
		if(fabs(g[t][col])<eps)continue;
		if(t-row)
		{
			for(int i=col;i<=c;i++)swap(g[row][i],g[t][i]);
		}
		for(int i=row+1;i<=r;i++)
		{
			if(fabs(g[i][col])<eps)continue;
			double tt=g[i][col]/g[row][col];
			g[i][col]=0.0;
			for(int j=col+1;j<=c;j++)
			{
				g[i][j]-=tt*g[row][col];
			}
		}
	}
	for(int i=r;i>0;i--)
	{
		x[i]=g[i][c];
		for(int j=i+1;j<=r;j++)x[i]-=g[i][j]*x[j];
		x[i]/=g[i][i];
	}
	return ;
}

gg(tot,tot+1);

你可能感兴趣的:(概率dp加方程)