2013 格仔刷油漆 dp

2021-09-23 01:38:54 字數 1669 閱讀 1162

a表示在2*n的格仔,從四個頂點中任意乙個格仔出發遍歷全部格仔的種類數,a[1] = 1a[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 ...