歷屆試題 格仔刷油漆
時間限制:1.0s 記憶體限制:256.0mb
問題描述
x國的一段古城牆的頂端可以看成 2*n個格仔組成的矩形(如下圖所示),現需要把這些格仔刷上保護漆。
你可以從任意乙個格仔刷起,刷完一格,可以移動到和它相鄰的格仔(對角相鄰也算數),但不能移動到較遠的格仔(因為油漆未乾不能踩!)
比如:a d b c e f 就是合格的刷漆順序。
c e f d a b 是另一種合適的方案。
當已知 n 時,求總的方案數。當n較大時,結果會迅速增大,請把結果對 1000000007 (十億零七) 取模。
輸入格式
輸入資料為乙個正整數(不大於1000)
輸出格式
輸出資料為乙個正整數。
樣例輸入 2
樣例輸出
24樣例輸入 3
樣例輸出
96樣例輸入
22樣例輸出
359635897
這應該是乙個很經典的動態規劃(可是還是很生疏,一看要找規律就不想找,好複雜啊,手動捂臉)
第一種情況:先找起點在四個角的,對四個角的某一點,可以往下走,可以往右走,如果是往下的話,再往右兩種情況對應著的是a[x] = a[x-1]*2,(這兒為第一種情況,畫得等號,其餘都是+=),如果先往右的話,必定要走回來,所以只能一直往右不能往下,知道走到頭,也就是a[x] += 2^(n-1)此處不能用公式,要用陣列會超陣列大小,第三種情況是z字形走,也就是先往右又往左下或者右上即a[x] += 2*a[x-2];
第二種情況:在中間,一列的兩個是一樣的,對稱的也是一樣的,然後中間的每一列都開始遍歷求解,兩種情況,往左或者往右,先去的那個方向,必須是2^( n-i ), 後去的是2×a[i-1].
#include using namespace std;
typedef long long ll;
const ll mod = 1000000007;
const int maxn = 1005;
ll a[maxn];
ll b[maxn];//不能直接使用公式,會超出範圍
int main()
memset(a, 0, sizeof(a));
b[1] = 1;
for(int i = 2; i <= n; i++)
a[1] = 1; a[2] = 6;
for(int i = 3; i <= n; i++)
ll sum = 0;
for(int i = 2; i < n; i++)
//cout << sum << endl;
sum += a[n]*4;
sum %= mod;
printf("%lld\n", sum);
return 0;
}
歷屆試題 格仔刷油漆
時間限制:1.0s 記憶體限制:256.0mb
問題描述
x國的一段古城牆的頂端可以看成 2*n個格仔組成的矩形(如下圖所示),現需要把這些格仔刷上保護漆。
你可以從任意乙個格仔刷起,刷完一格,可以移動到和它相鄰的格仔(對角相鄰也算數),但不能移動到較遠的格仔(因為油漆未乾不能踩!)
比如:a d b c e f 就是合格的刷漆順序。
c e f d a b 是另一種合適的方案。
當已知 n 時,求總的方案數。當n較大時,結果會迅速增大,請把結果對 1000000007 (十億零七) 取模。
輸入格式
輸入資料為乙個正整數(不大於1000)
輸出格式
輸出資料為乙個正整數。
樣例輸入
2樣例輸出
24樣例輸入
3樣例輸出
96樣例輸入
22樣例輸出
359635897
歷屆試題 格仔刷油漆
歷屆試題 格仔刷油漆 問題描述 x國的一段古城牆的頂端可以看成 2 n個格仔組成的矩形 如下圖所示 現需要把這些格仔刷上保護漆。你可以從任意乙個格仔刷起,刷完一格,可以移動到和它相鄰的格仔 對角相鄰也算數 但不能移動到較遠的格仔 因為油漆未乾不能踩!比如 a d b c e f 就是合格的刷漆順序。...
藍橋杯 歷屆試題 格仔刷油漆
歷屆試題 格仔刷油漆 時間限制 1.0s 記憶體限制 256.0mb 問題描述 x國的一段古城牆的頂端可以看成 2 n個格仔組成的矩形 如下圖所示 現需要把這些格仔刷上保護漆。你可以從任意乙個格仔刷起,刷完一格,可以移動到和它相鄰的格仔 對角相鄰也算數 但不能移動到較遠的格仔 因為油漆未乾不能踩!比...
格仔刷油漆(動態規劃(遞推))
x國的一段古城牆的頂端可以看成 2 n個格仔組成的矩形 如圖所示 現需要把這些格仔刷上保護漆。你可以從任意乙個格仔刷起,刷完一格,可以移動到和它相鄰的格仔 對角相鄰也算數 但不能移動到較遠的格仔 因為油漆未乾不能踩!比如 a d b c e f 就是合格的刷漆順序。c e f d a b 是另一種合...