P2222 [HNOI2001]矩阵乘积
前言:
实际上我写这篇题解就是为了纪念这个时刻。
此外,这道题为
朴素的算法的空间是
显然:
所以
并且
可是前文说明了不可以使用二维数组,那么我们就将其优化成一维。
我们推出的答案包括因式
再将二维形式中的剩余部分转换为一维。
最后可以得到答案的一维形式:
注:
代码:
#include<bits/stdc++.h>
using namespace std;
const int NR=6010;
int x,y,m,n,o,p,ans,cnt;
int i,j,k,ti,tj,tk;
int A[NR],C[NR];
int cx[NR],cy[NR],ck[NR];
int main()
{
cin>>x>>y>>m>>n>>o>>p;
cin>>i>>j>>k;
do{ //试了几次,发现 while 不行
if(i==x) A[j]=k;
ti=i,tj=j,tk=k; //存储行、列、值
cin>>i>>j>>k;
}while(i>=ti&&(i!=ti||j>tj));
do{
++cnt;
cx[cnt]=i,cy[cnt]=j,ck[cnt]=k;
ti=i,tj=j,tk=k;
cin>>i>>j>>k;
}while(i>=ti&&(i!=ti||j>tj));
do{ if(j==y) C[i]=k; }while(cin>>i>>j>>k);
for(int i=1;i<=cnt;i++) ans+=A[cx[i]]*ck[i]*C[cy[i]];
cout<<ans;
return 0;
}