luogu P1133 教主的花園 DP

2022-08-03 06:36:13 字數 1321 閱讀 1936

[luogu]p1133

教主的花園

——!x^n+y^n=z^n

題目描述

教主有著乙個環形的花園,他想在花園周圍均勻地種上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#:

說明【樣例說明】

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

【資料規模與約定】

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

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

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

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

動態規劃,用f[i][x][y][k]表示第i個位置放x,上乙個位置放y,第0個放k(用於最後判斷n-1是否成立)

轉移:f[i][x][y][k]=max((xz)||(x>y&&y

注意邊界及最後特判。

**:

1

dp3 #include4 #include5 #include6

using

namespace

std;

7 inline int

read();

8int max(int x,int y)

9namespace

lys34}35

intmain()

39 inline int

read()

46while(c>='

0'&&c<='

9') kk=kk*10+c-'

0',c=getchar();

47return kk*ff;

48 }

如有錯誤,請指正。

P1133教主的花園

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

P1133 教主的花園

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

題解 LuoGu1133 教主的花園

原題傳送門 顯然的dp 設計狀態dpi j,k dp dp i,j,k 表示第i ii棵樹,種了高度為10 j10j 10j的樹,高度關係是k 0 1 k 0 1 k 0 1 0表示比兩邊低,1表示比兩邊高 轉移方程dpi j,k max dpi 1,j j,kx or1 ai,j dp max d...