zoukankan      html  css  js  c++  java
  • 【UVA】【10828】随机程序

    数学期望/高斯消元/马尔可夫过程

      刘汝佳老师白书上的例题- -b

      本体不满足拓扑关系,但马尔可夫过程是可以高斯消元解的……

      用「高斯·约当消元」更方便!

     1 //UVA 10828
     2 #include<cmath>
     3 #include<vector>
     4 #include<cstdio>
     5 #include<cstring>
     6 #include<cstdlib>
     7 #include<iostream>
     8 #include<algorithm>
     9 #define rep(i,n) for(int i=0;i<n;++i)
    10 #define F(i,j,n) for(int i=j;i<=n;++i)
    11 #define D(i,j,n) for(int i=j;i>=n;--i)
    12 #define pb push_back
    13 using namespace std;
    14 int getint(){
    15     int v=0,sign=1; char ch=getchar();
    16     while(ch<'0'||ch>'9'){ if (ch=='-') sign=-1; ch=getchar();}
    17     while(ch>='0'&&ch<='9'){ v=v*10+ch-'0'; ch=getchar();}
    18     return v*=sign;
    19 }
    20 const int N=110;
    21 const double eps=1e-8;
    22 typedef double Matrix[N][N];
    23 /******************tamplate*********************/
    24 
    25 void gauss_jordan(Matrix A,int n){
    26     int i,j,k,r;
    27     rep(i,n){
    28         r=i;
    29         for(j=i+1;j<n;++j)
    30             if (fabs(A[j][i]) > fabs(A[r][i])) r=j;
    31         if (fabs(A[r][i]) < eps)continue;
    32         if (r!=i) F(j,0,n) swap(A[r][j],A[i][j]);
    33         
    34         rep(k,n) if (k!=i)
    35             D(j,n,i) A[k][j]-=A[k][i]/A[i][i]*A[i][j];
    36     }
    37 }
    38 Matrix A;
    39 int n,d[N];
    40 vector<int> pre[N];
    41 bool inf[N];
    42 
    43 int main(){
    44 #ifndef ONLINE_JUDGE
    45     freopen("10828.in","r",stdin);
    46     freopen("10828.out","w",stdout);
    47 #endif
    48     int cs=0;
    49     while(scanf("%d",&n)==1 && n){
    50         memset(d,0,sizeof d);
    51         rep(i,n) pre[i].clear();
    52         int a,b;
    53         while(scanf("%d%d",&a,&b)==2 && a && b){
    54             a--; b--;
    55             d[a]++;
    56             pre[b].pb(a);
    57         }
    58         memset(A,0,sizeof (A));
    59         rep(i,n){
    60             A[i][i]=1;
    61             rep(j,pre[i].size())
    62                 A[i][pre[i][j]]-=1.0/d[pre[i][j]];
    63             if (i==0) A[i][n]=1;
    64         }
    65 
    66         gauss_jordan(A,n);
    67         memset(inf,0,sizeof inf);
    68         for(int i=n-1;i>=0;i--){
    69             if ( fabs(A[i][i])<eps && fabs(A[i][n])>eps ) inf[i]=1;
    70             for(int j=i+1;j<n;j++)
    71                 if (fabs(A[i][j])>eps && inf[j]) inf[i]=1;
    72         }
    73 
    74         int q,u;
    75         scanf("%d",&q);
    76         printf("Case #%d:
    ",++cs);
    77         while(q--){
    78             scanf("%d",&u); u--;
    79             if (inf[u]) printf("infinity
    ");
    80             else printf("%.3lf
    ",fabs(A[u][u]) < eps ? 0.0 : A[u][n]/A[u][u]);
    81         }
    82     }
    83     return 0;
    84 }
    View Code
  • 相关阅读:
    encog(二)神经网络的训练
    encog(一)
    JAVA基础知识总结14(String、StringBuffer、StringBuilder)
    JAVA基础知识总结13(同步)
    JAVA基础知识总结12(多线程)
    JAVA基础知识总结11(异常)
    JAVA基础知识总结10(包类)
    JAVA基础知识总结9(特殊类)
    JAVA基础知识总结8(设计模式)
    JAVA基础知识总结7(抽象类 | 接口)
  • 原文地址:https://www.cnblogs.com/Tunix/p/4299384.html
Copyright © 2011-2022 走看看