忙碌了乙個學期的 q老師 決定獎勵自己 n 天假期。
假期中不同的穿衣方式會有不同的快樂值。
已知 q老師 一共有 m 件襯衫,且如果昨天穿的是襯衫 a,今天穿的是襯衫 b,則 q老師 今天可以獲得 f[a][b] 快樂值。
在 n 天假期結束後,q老師 最多可以獲得多少快樂值?
輸入:
輸入檔案包含多組測試樣例,每組測試樣例格式描述如下:
第一行給出兩個整數 n m,分別代表假期長度與 q老師 的襯衫總數。(2 ≤ n ≤ 100000, 1 ≤ m ≤ 100)
接下來 m 行,每行給出 m 個整數,其中第 i 行的第 j 個整數,表示 f[i][j]。(1 ≤ f[i][j] ≤ 1000000)
測試樣例組數不會超過 10。
輸出:
每組測試樣例輸出一行,表示 q老師 可以獲得的最大快樂值。
樣例輸入:
3 20 1
1 04 3
1 2 3
1 2 3
1 2 3
樣例輸出:29
f[i][j]表示第 i 天,穿的衣服為 j 所獲得的快樂值總和。
這題最關鍵的是想到把累加替換為max,乘法替換為加法。
因為矩陣快速冪要求矩陣乘法具有結合律,而這樣替換滿足要求,所以可以用矩陣快速冪。
#include
#include
#include
#define ll long long
using
namespace std;
const
int n=
110;
int f[
110]
[110];
int dp[
110000][
110]
;struct matrix}}
return ret;
}matrix()
matrix
(const matrix& t)};
matrix quick_pow
(matrix a,
int x)
a=a*a;
x>>=1;
}return ret;
}int
main()
} matrix t1,t2;
for(
int i=
0;it2=
quick_pow
(t1,n-1)
; ll ans=0;
for(
int i=
0;icout<
}}
Week 14 作業D Q老師染磚
衣食無憂的 q老師 有一天突發奇想,想要去感受一下勞動人民的艱苦生活。具體工作是這樣的,有 n 塊磚排成一排染色,每一塊磚需要塗上紅 藍 綠 黃這 4 種顏色中的其中 1 種。且當這 n 塊磚中紅色和綠色的塊數均為偶數時,染色效果最佳。為了使工作效率更高,q老師 想要知道一共有多少種方案可以使染色效...
week14 作業C Q老師的考驗
q老師 對數列有一種非同一般的熱愛,尤其是優美的斐波那契數列。當 x 10 時,f x x 當 x 10 時,f x a0 f x 1 a1 f x 2 a2 f x 3 a9 f x 10 ai 只能為 0 或 1。q老師 將給定 a0 a9,以及兩個正整數 k m,詢問 f k m 的數值大小。...
week14 作業D Q老師染磚
衣食無憂的 q老師 有一天突發奇想,想要去感受一下勞動人民的艱苦生活。具體工作是這樣的,有 n 塊磚排成一排染色,每一塊磚需要塗上紅 藍 綠 黃這 4 種顏色中的其中 1 種。且當這 n 塊磚中紅色和綠色的塊數均為偶數時,染色效果最佳。為了使工作效率更高,q老師 想要知道一共有多少種方案可以使染色效...