[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
注意邊界及最後特判。
**:
1dp3 #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...