a
表示在2*n
的格仔,從四個頂點中任意乙個格仔出發遍歷全部格仔的種類數,a[1] = 1
a[2] = 6
(畫出所有情況)
b
表示在2*n
的格仔,從任意乙個格仔出發,遍歷所有格仔且終點在出發點這一列,以為要回來,所有每一步只能一直往左或者右走(這樣該列另乙個格仔就會留個回來時刷),所以每一步2
中選擇,b[i] = 2 * b[i-1]
先去該列的另乙個,那麼下一列有2
種 選擇,a[i] += 2 * a[i-1]
,
終點是該列另乙個格仔,a[i] += b[i]
,走的是b
的方法
這一種是先去下一列(第二列),然後將第三列的兩個格仔都刷完,去第二列有2
個格仔可以選,位於第二列時去第三列也有2
個格仔可以選,所以a[i] += 4 * a[i-1]
出發點在中間時,無論先遍歷左邊還是右邊都要通過出發點的列的另乙個點到達左(右)邊所以 任意一列中選擇出發點有2
中選擇,先遍歷左所有點
且回到出發點這一列另乙個點方法為b[i]
,然後遍歷右邊(終點任意),且出發點在該列右邊一列任意選擇2個點,則方法為為2 * a[n-i]
同理先遍歷右邊也是這樣
s um
=4∗b
[n]+
σi=2
n−1(
2∗2∗
b[i]
∗a[n
−i]+
2∗2∗
b[n−
i+1]
∗a[i
−1])
sum = 4*b[n] + \sigma_^ (2*2*b[i]*a[n-i] + 2*2*b[n-i+1] * a[i-1])
sum=4∗
b[n]
+σi=
2n−1
(2∗
2∗b[
i]∗a
[n−i
]+2∗
2∗b[
n−i+
1]∗a
[i−1
])
#include #define mod 1000000007
using namespace std;
const int maxn = 1e3+5;
long long a[maxn];
long long b[maxn];
int n;
int main()
if (n == 1) sum = 2;
cout << sum;
return 0;
}
格仔刷油漆(DP)
格仔刷油漆 x國的一段古城牆的頂端可以看成 2 n個格仔組成的矩形 如圖1所示 現需要把這些格仔刷上保護漆。你可以從任意乙個格仔刷起,刷完一格,可以移動到和它相鄰的格仔 對角相鄰也算數 但不能移動到較遠的格仔 因為油漆未乾不能踩!比如 a d b c e f 就是合格的刷漆順序。c e f d a ...
格仔刷油漆(dp)
格仔刷油漆 x國的一段古城牆的頂端可以看成 2 n個格仔組成的矩形 如圖1所示 現需要把這些格仔刷上保護漆。你可以從任意乙個格仔刷起,刷完一格,可以移動到和它相鄰的格仔 對角相鄰也算數 但不能移動到較遠的格仔 因為油漆未乾不能踩!比如 a d b c e f 就是合格的刷漆順序。c e f d a ...
nyoj 980 格仔刷油漆
時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 x國的一段古城牆的頂端可以看成 2 n個格仔組成的矩形 如下圖所示 現需要把這些格仔刷上保護漆。你可以從任意乙個格仔刷起,刷完一格,可以移動到和它相鄰的格仔 對角相鄰也算數 但不能移動到較遠的格仔 因為油漆未乾不能踩!比如 a ...