P1133 教主的花園

2022-05-13 12:33:09 字數 1584 閱讀 6459

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

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

輸入格式:

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

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

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

輸出格式:

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

輸入樣例#1:

4 

1 3 2

3 1 2

3 1 2

3 1 2

輸出樣例#1:

11

【樣例說明】

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

【資料規模與約定】

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

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

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

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

用dp[i][j][k]表示第i個點,種第j種樹,k表示上公升序列或者下降序列

1 #include2 #include3 #include4 #include5

using

namespace

std;

6const

int maxn=200001;7

void read(int &n)811

while(c>='

0'&&c<='9'

)12

13 flag==1?n=-x:n=x;14}

15int dp[maxn][5][3

];16

intn;

17int v[maxn][5

];18

intmain()

1927

for(int i=2;i<=n;i++)

2834

int ans=0

;35 ans=max(ans,dp[n][1][1]+v[1][2

]);36 ans=max(ans,dp[n][1][1]+v[1][3

]);37 ans=max(ans,dp[n][2][0]+v[1][1

]);38 ans=max(ans,dp[n][2][1]+v[1][3

]);39 ans=max(ans,dp[n][3][0]+v[1][1

]);40 ans=max(ans,dp[n][3][0]+v[1][2

]);41 printf("%d"

,ans);

42return0;

43 }

P1133教主的花園

本題是一道多維dp題目,那麼在不開啟演算法標籤的情況下怎麼去想呢,首先是題目的求的是最值,比較好想到的就是動態規劃。首先是本題的種植範圍限在一維,但是有種類要求,可以把高度10,20,30簡單理解為種類1,2,3 因為沒有其他奇奇怪怪的東西 我們需要一維記錄位置,二維記錄種類,而教主大人又有特殊審美...

洛谷 P1133 教主的花園

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

P1133 教主的花園 動態規劃

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