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[][]; }temp,ans; matrix mul(matrix a,matrix b)
{
matrix c;
for(int i=;i<n;i++)
for(int j=;j<n;j++)
{
c.m[i][j]=;
for(int q=;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,,sizeof(ans.m));
for(int i=;i<n;i++)ans.m[i][i]=;
while(k)
{
if(k&)ans=mul(ans,temp);
temp=mul(temp,temp);
k>>=;
}
return ;
} int main()
{
while(scanf("%d%d",&n,&k)==&&n&&k)
{
memset(temp.m,,sizeof(temp.m));
for(int i=;i<n;i++)temp.m[i][i]=;
int t[]={};
for(int i=;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=;
for(int i=;i<n;i++)sum+=t[i]*ans.m[i][n-];
printf("%.0f\n",sum);
}
}
上一篇:Android 在安装完成界面,点击打开应用程序。在应用程序点击home键,再从桌面打开程序导致产生多个实例或者说程序被重复打开


下一篇:sql server ExecuteNonQuery()返回受影响行数不适用select语句