matrix_超时

时间:2023-03-08 18:09:47
matrix_超时

问题 H: matrix

时间限制: 1 Sec  内存限制: 256 MB
提交: 26  解决: 10
[提交][状态][讨论版]

题目描述

给定两个长度为n的整数序列l和t,分别作为n×n矩阵F的第一列和第一行,并且保证l1 = t1。同时矩阵中的任意其他元素Fij由以下递推给定:
Fi,j=a·Fi,j-1 + b·Fi-1,j
给定系数a,b,要求计算Fn,n模109+7的值。

输入

第一行包含三个整数n,a,b。第二行包含n个整数li。第三行包含n个整数ti。n, a, b, li , ti ≤ 5000。

输出

共一行包含一个整数,表示Fn,n模109+7的值。

样例输入

4 3 5
4 1 7 3
4 7 4 8

样例输出

59716
#include <iostream>
#include <cstdio>
#include <cmath> using namespace std; int aa[][]; int main()
{
int n,a,b;
long int mod=pow(,)+;
scanf("%d %d %d",&n,&a,&b);
for(int i=;i<n;i++){
scanf("%d",&aa[i][]);
}
for(int i=;i<n;i++){
scanf("%d",&aa[][i]);
if(i>=){
for(int j=;j<n;j++){
aa[j][i]=aa[j-][i]*b+aa[j][i-]*a;
if(aa[j][i]>mod){
aa[j][i]%=mod;
}
}
}
}
/*
for(int i=1;i<n;i++){
for(int j=1;j<n;j++){
aa[i][j]=aa[i-1][j]*b+aa[i][j-1]*a;
if(aa[i][j]>mod){
aa[i][j]%=mod;
}
}
for(int j=1;j<n;j++){
aa[j][i]=aa[j-1][i]*b+aa[j][i-1]*a;
if(aa[i][j]>mod){
aa[j][i]%=mod;
}
}
}
*/
printf("%d",aa[n-][n-]%mod);
return ;
}