思路:矩陣快速冪優化dp,
首先,定義a[i]為染i塊磚時,紅綠均偶數的方案數。
b[i]:紅綠均奇數,c[i]:紅綠一奇數一偶數。
那麼我們可以得到三個狀態轉移方程:
很明顯,我們可以得到乙個等式:
是不是很直觀了呢,我們只需要知道a[1]=2,b[1]=0,c[1]=2就可以求出所有的情況。
完整**:
定義dp[i][j]為第i天穿第j件衣服所獲得的最大快樂值,我們得到狀態轉移方程:
那麼直接進行遍歷肯定是會超時的,這裡需要使用矩陣快速冪優化,只需要把矩陣乘過載成上面的形式就行了。
具體見**:
#include
#include
#include
#define ll long long
using
namespace std;
const
int n=
105;
int n,m;
struct matrix}}
return tmp;
}matrix()
};matrix quick_pow
(matrix x,
int e)
x=x*x;
e=e>>1;
}return tmp;
}int
main()
} ansm=
quick_pow
(h,n-1)
; ll ans=0;
for(
int i=
0;i)for
(int j=
0;j) cout<
}return0;
}
Week14作業 C Q老師的考驗 矩陣快速冪
q老師 對數列有一種非同一般的熱愛,尤其是優美的斐波那契數列。這一天,q老師 為了增強大家對於斐波那契數列的理解,決定在斐波那契的基礎上建立乙個新的數列 f x 來考一考大家。數列 f x 定義如下 當 x 10 時,f x x 當 x 10 時,f x a0 f x 1 a1 f x 2 a2 f...
程式設計思維week14 選做題
然而還要結合dp 關於矩陣快速冪,以前學的時候寫過一篇部落格 還是和普通快速冪一樣的原理,通過二進位制拆分指數來讓冪的複雜度降到log級別,但是和普通快速冪的應用環境不同,矩陣快速冪常用來優化遞推式的計算,比較經典的問題就是求斐波那契數列的第1e7 項,這個問題在以前的部落格裡也寫過了。這周遇到的問...
week14作業E Q老師度假
忙碌了乙個學期的 q老師 決定獎勵自己 n 天假期。假期中不同的穿衣方式會有不同的快樂值。已知 q老師 一共有 m 件襯衫,且如果昨天穿的是襯衫 a,今天穿的是襯衫 b,則 q老師 今天可以獲得 f a b 快樂值。在 n 天假期結束後,q老師 最多可以獲得多少快樂值?輸入 輸入檔案包含多組測試樣例...