衣食無憂的 q老師 有一天突發奇想,想要去感受一下勞動人民的艱苦生活。
具體工作是這樣的,有 n 塊磚排成一排染色,每一塊磚需要塗上紅、藍、綠、黃這 4 種顏色中的其中 1 種。且當這 n 塊磚中紅色和綠色的塊數均為偶數時,染色效果最佳。
為了使工作效率更高,q老師 想要知道一共有多少種方案可以使染色效果最佳,你能幫幫他嗎?
第一行為 t,代表資料組數。(1 ≤ t ≤ 100)
接下來 t 行每行包括乙個數字 n,代表有 n 塊磚。(1 ≤ n ≤ 1e9)
輸出滿足條件的方案數,答案模 10007。
2
12
2
6
對連續的格仔進行染色,很明顯該問題具有子結構,可使用動態規劃的思想,設a[i]為對i個格仔染色紅綠格仔數均為偶數的染色方案。
因為n很大,所以應考慮優化dp的方法,增設狀態b[i]為染i個格仔紅綠均為奇數的方案,c[i]為染i個格仔,紅綠一奇一偶的方案數。
故可得a[i]=2*a[i-1]+c[i-1]
b[i]=2*b[i-1]+c[i-1]
c[i]=2*a[i-1]+2*b[i-1]+2*c[i-1]
可利用上式構造矩陣方程,利用矩陣快速冪進行優化。
#include
#include
#include
using
namespace std;
const
int n=3;
struct matrix
matrix
(matrix&b)
matrix operator
*(matrix&b)}}
return ret;}}
;matrix quick_pow
(matrix a,
int x)
return ret;
}int
main()
matrix temp;
temp.x[0]
[0]=
2;temp.x[0]
[2]=
1;temp.x[1]
[1]=
2;temp.x[1]
[2]=
1;temp.x[2]
[0]=temp.x[2]
[1]=temp.x[2]
[2]=
2;temp=
quick_pow
(temp,k-1)
;int ans=0;
ans+
=temp.x[0]
[0]*
2%10007
; ans+
=temp.x[0]
[2]*
2%10007
; ans%
=10007
;printf
("%d\n"
,ans);}
return0;
}
week14 作業D Q老師染磚
衣食無憂的 q老師 有一天突發奇想,想要去感受一下勞動人民的艱苦生活。具體工作是這樣的,有 n 塊磚排成一排染色,每一塊磚需要塗上紅 藍 綠 黃這 4 種顏色中的其中 1 種。且當這 n 塊磚中紅色和綠色的塊數均為偶數時,染色效果最佳。為了使工作效率更高,q老師 想要知道一共有多少種方案可以使染色效...
week14作業E Q老師度假
忙碌了乙個學期的 q老師 決定獎勵自己 n 天假期。假期中不同的穿衣方式會有不同的快樂值。已知 q老師 一共有 m 件襯衫,且如果昨天穿的是襯衫 a,今天穿的是襯衫 b,則 q老師 今天可以獲得 f a b 快樂值。在 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 的數值大小。...