動態規劃 mr368 教主種樹

2022-08-09 07:36:12 字數 1673 閱讀 9991

【題目大意】

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

const

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。教主希望這一圈樹種得有層次感,所以任何乙個位置的樹要比它相鄰的兩棵樹的高度都高或...