原題傳送門
顯然的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(dp_+a_)
dpi,j,
k=m
ax(d
pi−1
,jj,
kxor
1+a
i,j
)但是處理n與1相鄰的情況,需要再跑一遍1的狀態
code:
#include
#define maxn 100010
#define ll long long
using
namespace std;
int n, a[maxn][4
], dp[maxn][4
][2]
;inline
intread()
intmain()
for(
int j =
1; j <=3;
++j)
int ans =0;
for(
int j =
1; j <=3;
++j) ans =
max(ans,
max(dp[1]
[j][0]
, dp[1]
[j][1]
));printf
("%d\n"
, ans)
;return0;
}
洛谷 P1133 教主的花園 題解
通往題目的大門 進入正題,需要求最大觀賞價值,那麼用於dp的f陣列首先肯定要有兩維,第一維i表示第i個位置,第二維j表示種第j種樹 我們不妨設10,20,30這三種樹為1,2,3 然後又發現,第i個位置能種什麼樹,不單單跟上乙個位置有關,還跟上上個位置有關,那這樣呼叫兩位去dp顯得十分複雜,於是我們...
洛谷 題解 P1133 教主的花園
n 10 5 o n 演算法 dp i j k 表示在第i個位置,種j 10的高度的樹,且這棵樹是否比相鄰兩棵樹高dp i 1 0 max dp i 1 2 1 dp i 1 3 1 a i 種高度為10的樹,肯定比相鄰的兩棵樹矮 dp i 2 0 dp i 1 3 1 b i 種高度為20且高度比...
P1133教主的花園
本題是一道多維dp題目,那麼在不開啟演算法標籤的情況下怎麼去想呢,首先是題目的求的是最值,比較好想到的就是動態規劃。首先是本題的種植範圍限在一維,但是有種類要求,可以把高度10,20,30簡單理解為種類1,2,3 因為沒有其他奇奇怪怪的東西 我們需要一維記錄位置,二維記錄種類,而教主大人又有特殊審美...