zoukankan      html  css  js  c++  java
  • Evolution ZOJ2853

    矩阵太大导致爆栈

    解决方法:矩阵不要开在main函数里面  全部在外面处理  main函数只能处理简单的赋值和加减

    损失的要自减!!

    最后为  sum+=t[i]*ans.m[i][n-1];   得到的ans.m 就是一个有向图  代表从i到n-1的转化率

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    using namespace std;
    
    int n,k;
    struct matrix
    {
        double m[201][201];
    
    }temp,ans;
    
    matrix mul(matrix a,matrix b)
    {
        matrix c;
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
        {
             c.m[i][j]=0;
            for(int q=0;q<n;q++)
                c.m[i][j]=c.m[i][j]+ a.m[i][q]*b.m[q][j];
        }
        return c;
    }
    
    void fast(void)
    {
    
        memset(ans.m,0,sizeof(ans.m));
        for(int i=0;i<n;i++)ans.m[i][i]=1;
        while(k)
        {
            if(k&1)ans=mul(ans,temp);
            temp=mul(temp,temp);
            k>>=1;
        }
        return ;
    }
    
    int main()
    {
        while(scanf("%d%d",&n,&k)==2&&n&&k)
        {
            memset(temp.m,0,sizeof(temp.m));
            for(int i=0;i<n;i++)temp.m[i][i]=1;
            int t[201]={0};
            for(int i=0;i<n;i++)scanf("%d",&t[i]);
            int q;
            scanf("%d",&q);
            while(q--)
            {
                int x,y;double z;
                scanf("%d%d%lf",&x,&y,&z);
                temp.m[x][x]-=z;
                temp.m[x][y]+=z;
            }
             fast();
             double sum=0;
             for(int i=0;i<n;i++)sum+=t[i]*ans.m[i][n-1];
             printf("%.0f
    ",sum);
        }
    }
  • 相关阅读:
    Lock、Synchronized锁解析
    js多个计时器互不影响触发
    php Excel文件导入 Spreadsheet_Excel_Reader
    Tcp/ip简介
    对称加密和非对称加密
    AFNetworking 3.0迁移指南
    从 Objective-C 里的 Alloc 和 AllocWithZone 谈起
    iOS 沙盒
    SDWebImage解析
    dSYM文件
  • 原文地址:https://www.cnblogs.com/bxd123/p/10351571.html
Copyright © 2011-2022 走看看