JZOJ 1406 教主的花園

2021-08-02 14:26:32 字數 1356 閱讀 5761

教主有著乙個環形的花園,他想在花園周圍均勻地種上n棵樹,但是教主花園的土壤很特別,每個位置適合種的樹都不一樣,一些樹可能會因為不適合這個位置的土壤而損失觀賞價值。

教主最喜歡3種樹,這3種樹的高度分別為10,20,30。教主希望這一圈樹種得有層次感,所以任何乙個位置的樹要比它相鄰的兩棵樹的高度都高或者都低,並且在此條件下,教主想要你設計出一套方案,使得觀賞價值之和最高。

輸入的第1行為乙個正整數n,表示需要種的樹的棵樹。

接下來n行,每行3個不超過10000的正整數ai,bi,ci,按順時針順序表示了第i個位置種高度為10,20,30的樹能獲得的觀賞價值。

第i個位置的樹與第i+1個位置的樹相鄰,特別地,第1個位置的樹與第n個位置的樹相鄰。

輸出僅包括乙個正整數,為最大的觀賞價值和。

4 1 3 2

3 1 2

3 1 2

3 1 2

【樣例說明】

第1~n個位置分別種上高度為20,10,30,10的樹,價值最高。

【資料規模】

對於20%的資料,有n≤10;

對於40%的資料,有n≤100;

對於60%的資料,有n≤1000;

對於100%的資料,有4≤n≤100000,並保證n一定為偶數。

比較明顯的dp模型,只不過雖然是環狀的,但是每個點的狀態跟確定的區間長度無關,所以只需要列舉第1棵樹的高度(特別注意當高度為20時要分下一棵樹是10還是30),鏈狀dp即可。

f[i][1..4]表示分別前i棵樹,第i棵樹的高度為10(下棵樹肯定要比它高),20(下棵樹比它高),20(下棵樹比它矮),30(下棵樹肯定要比它矮)的最大價值。轉移也顯而易見了。

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#define n 100010

#define inf 0x3f3f3f3f

#define sqr(x) ((x) * (x))

#define pi acos(-1)

int read()

while (ch >= '0' && ch <= '9')

return x * f;

}int high[n][3];

int f[n][4];

void init()

int n;

void dp()

}int ans;

void work()

int main()

jzoj 1792 教主的花園 2018 2 7

description 問題背景 lhx教主最近總困擾於前來膜拜他的人太多了,所以他給他的花園加上了一道屏障。問題描述 可以把教主的花園附近區域抽像成乙個正方形網格組成的網路,每個網格都對應了乙個座標 均為整數,有可能為負 若兩個網格 x1,y1 x2,y2 有 x1 x2 y1 y2 1,則說這兩...

教主的花園

lhx教主最近總困擾於前來膜拜他的人太多了,所以他給他的花園加上了一道屏障。可以把教主的花園附近區域抽像成乙個正方形網格組成的網路,每個網格都對應了乙個座標 均為整數,有可能為負 若兩個網格 x1,y1 x2,y2 有 x1 x2 y1 y2 1,則說這兩個網格是相鄰的,否則不是相鄰的。教主在y 0...

教主的花園

教主有著乙個環形的花園,他想在花園周圍均勻地種上n棵樹,但是教主花園的土壤很特別,每個位置適合種的樹都不一樣,一些樹可能會因為不適合這個位置的土壤而損失觀賞價值。教主最喜歡33種樹,這3種樹的高度分別為10,20,3010,20,30。教主希望這一圈樹種得有層次感,所以任何乙個位置的樹要比它相鄰的兩...