【題目大意】
教主有著乙個環形的花園,他想在花園周圍均勻地種上n棵樹,但是教主花園的土壤很特別,每個位置適合種的樹都不一樣,一些樹可能會因為不適合這個位置的土壤而損失觀賞價值。 教主最喜歡3種樹,這3種樹的高度分別為10,20,30。教主希望這一圈樹種得有層次感,所以任何乙個位置的樹要比它相鄰的兩棵樹的高度都高或者都低,並且在此條件下,教主想要你設計出一套方案,使得觀賞價值之和最高。【思路】【輸入格式】
輸入的第1行為乙個正整數n,表示需要種的樹的棵數。
接下來n行,每行3個不超過10000的正整數ai,bi,ci,按順時針順序表示了第i個位置種高度為10,20,30的樹能獲得的觀賞價值。
第i個位置的樹與第i+1個位置的樹相鄰,特別地,第1個位置的樹與第n個位置的樹相鄰。
【輸出格式】
輸出僅包括乙個正整數,為最大的觀賞價值和。
【樣例輸入】
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一定為偶數。
f[i][0..3]分別表示前i棵樹的最大觀賞價值總和。
f[i][0]當前樹高度為10,且前後的樹高度均大於它(這是必然的);
f[i][1]當前樹高度為20,且前後的樹高度均大於它;
f[i][2]當前樹高度為20,且前後的樹高度均小於它;
f[i][3]當前樹高度為30,且前後樹的高度均小於它(這也是必然的)。
接下來以上述四種情況為第一棵樹進行四次dp,每一次的f[i]=max(f[n-1][上述情況對應的前一棵樹的情況]),繞各樹一圈直到返回起始點,如f[i][0]對應的前一棵樹就是f[i-1][2]和f[i-1][3]。
1 #include2 #include3 #include4 #include5const
int maxn=100000+500;6
using
namespace
std;
7int f[maxn][4];8
/*f[i][0..3]·ö±ð±íê¾ç°i¿ãê÷µä×î´ó¹ûéí¼ûöµ×üºí910
f[i][1]µ±ç°ê÷¸ß¶èîª20£¬çòç°ºóµäê÷¸ß¶è¾ù´óóúëü
11f[i][2]µ±ç°ê÷¸ß¶èîª20£¬çòç°ºóµäê÷¸ß¶è¾ùð¡óúëü
12*/
13int a[maxn][3
]; 14
/*a[i][j]±íê¾µúi¸öî»öãµújööê÷µäéóãà¼ûöµ
*/15
intn,ans;
1617
void
init()
1823
24void dp(int
x)2535}
3637
38void
mainprocess()
3951
52int
main()
53
問題 H 啊冷種樹 動態規劃
阿冷喜歡種樹,但他有個奇怪的愛好,他喜歡將連續相同種類的樹當成一片森林。比如trees 0,1,1,2,2,2,1 它包含4片森林,現在有m顆樹,有n種樹的種類 數的種類從1到n 並給出在位置i,種植種類為j的樹所消耗的力氣 cost i j 求阿冷最終將m顆樹種植成k片森林的最少消耗的力氣。第一行...
洛谷 教主的花園 動態規劃
教主有著乙個環形的花園,他想在花園周圍均勻地種上n棵樹,但是教主花園的土壤很特別,每個位置適合種的樹都不一樣,一些樹可能會因為不適合這個位置的土壤而損失觀賞價值。教主最喜歡3種樹,這3種樹的高度分別為10,20,30。教主希望這一圈樹種得有層次感,所以任何乙個位置的樹要比它相鄰的兩棵樹的高度都高或者...
P1133 教主的花園 動態規劃
教主有著乙個環形的花園,他想在花園周圍均勻地種上n棵樹,但是教主花園的土壤很特別,每個位置適合種的樹都不一樣,一些樹可能會因為不適合這個位置的土壤而損失觀賞價值。教主最喜歡33種樹,這3種樹的高度分別為10,20,30。教主希望這一圈樹種得有層次感,所以任何乙個位置的樹要比它相鄰的兩棵樹的高度都高或...