BZOJ3231 矩陣連乘,稍有點複雜

2021-06-16 21:49:17 字數 1415 閱讀 7255

題目:3231: [sdoi2008]遞迴數列

題意:

乙個由自然數組成的數列按下式定義:

對於

i <= k

:ai = bi

對於

i > k: ai = c1ai-1 + c2ai-2 + ... + ckai-k

其中bj和

cj (1<=j<=k

)是給定的自然數。寫乙個程式,給定自然數

m<=n,

計算am

+am+1

+ am+2

+ ... + an

,並輸出它除以給定自然數

p的餘數的值。1<= k<=15,1 <= m <= n <= 10^18

本題主要是構造矩陣,然後就直接矩陣連乘即可。

構造的上述矩陣的i大於k,當i小於k時就直接加起來就行。

這樣am

+am+1

+ am+2

+ ... + an=s(n)-s(m-1)

**:

#include #include #include using namespace std;

typedef long long ll;

const int maxn=25;

struct matrix

;ll b[maxn],c[maxn];

ll k,m,n,p;

matrix a,per;

void init()

matrix multi(matrix a,matrix b)

}return c;

}matrix matrix_mod(ll n)

n>>=1;

p=multi(p,p);

}return ans;

}int main()

}s=0;

for(i=0;i=2)

for(i=0;i<=m-2;i++)

if(m<2) ret2=0;

}else

}cout<

python矩陣連乘 動態規劃 矩陣連乘問題

一 問題描述 給定n個數字矩陣a1,a2,an,其中ai與ai 1是可乘的,設ai是pi 1 pi矩陣,i 1,2,n。求矩陣連乘a1a2.an的加括號方法,使得所用的乘次數最少。例子三個矩陣連乘,可以有 a1a2 a3和a1 a2a3 兩種方法求積 乘法次數分別為 p0p1p2 p0p2p3和p0...

矩陣連乘問題

矩陣連乘問題 應用動態規劃演算法,將前面計算的重複值儲存,一次來推進下一步的計算,直到得到m 1 n 的值,為最少的乘法次數 m i j 表示計算a i.j 所需的最少數乘次數 m i j min i s i j 記錄斷開位置,也就是最少計算次數的中間位置。include using namespa...

最優矩陣連乘

time limit 1 ms memory limit 128 mb difficulty 3 乙個n m矩陣由n行m列共n m個數排列而成。兩個矩陣a和b可以相乘當且僅當a的列數等於b的行數。乙個n m的矩陣乘以乙個m p的矩陣等於乙個n p的矩陣,運算量為nmp。矩陣乘法滿足結合律,a b c...