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[5005][5005];

int main()
{
    int n,a,b;
    long int mod=pow(10,9)+7;
    scanf("%d %d %d",&n,&a,&b);
    for(int i=0;i<n;i++){
        scanf("%d",&aa[i][0]);
    }
    for(int i=0;i<n;i++){
        scanf("%d",&aa[0][i]);
        if(i>=1){
            for(int j=1;j<n;j++){
                aa[j][i]=aa[j-1][i]*b+aa[j][i-1]*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-1][n-1]%mod);
    return 0;
}

 

posted @ 2016-10-02 23:40  多一份不为什么的坚持  阅读(322)  评论(0编辑  收藏  举报