[CSP]矩阵运算

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e4+5;
const int D=25;
ll q[N][D],k[N][D],v[N][D],w[N],K[D][N];
ll n,d;
int main()
{
	cin>>n>>d;
	for(int u=1;u<=3;u++)
	{
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=d;j++)
			{
				if(u==1)cin>>q[i][j];
				else if(u==2)cin>>k[i][j];
				else if(u==3)cin>>v[i][j];
			}
		}
	}
	for(int i=1;i<=n;i++)cin>>w[i];
	for(int i=1;i<=d;i++)
	{
		for(int j=1;j<=n;j++)
		{
			K[i][j]=k[j][i];
		}
	}
	ll tmp[D][D];
	memset(tmp,0,sizeof tmp);
	for(int i=1;i<=d;i++)
	{
		for(int j=1;j<=d;j++)
		{
			for(int u=1;u<=n;u++)
			{
				tmp[i][j]+=K[i][u]*v[u][j];
			}
		}
	}
	ll ans[N][D];
	memset(ans,0,sizeof ans);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=d;j++)
		{
			for(int u=1;u<=d;u++)
			{
				ans[i][j]+=q[i][u]*tmp[u][j];
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=d;j++)
		{
			if(j!=1)cout<<' ';
			ans[i][j]*=w[i];
			cout<<ans[i][j];
		}
		cout<<endl;
	}
}

         错误点:必须要用longlong,不然会溢出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值