Week 14 作業D Q老師染磚

2021-10-06 08:52:33 字數 1494 閱讀 8519

衣食無憂的 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 的數值大小。...