POJ 1836(動規,上公升下降子串行問題)

2021-09-28 14:45:51 字數 903 閱讀 2878

poj_1836,動規問題,上公升下降子串行問題, 和普通的上公升/下降子串行問題最大的不同:要考慮佇列中點乙個或兩個的情況

#include

using

namespace std;

intmain()

//left[i]:以i位元素結尾的最長上公升子串行

for(

int i=

0;i)for

(int j=

0;j(alignment[j]

&& left[j]+1

>left[i]

) left[i]

=left[j]+1

;//right[i]:以i位元素開頭的最長下降子串行

for(

int i=n-

1;i>=

0;i--

)for

(int j=i;j>=

0;j--)if

(alignment[j]

>alignment[i]

&& right[i]+1

>right[j]

) right[j]

=right[i]+1

;int ans=0;

for(

int i=

0;i)//中點只有乙個

ans=

max(ans,left[i]

+right[i]-1

);for(

int i=

0;i)//中點兩個(可能不相鄰)

for(

int j=i+

1;j) ans=

max(ans,left[i]

+right[j]);

cout

}

poj 1836 最長上公升 下降子串行

alignment 題意 輸入一串數字代表著一列排好隊的軍人的身高,現在要求從其中移走一些人,使得剩餘在隊伍中的任何乙個人都可以向左或者向右看到隊伍的頭。隊伍中身高並列最高的幾個人不會相互阻礙,但是其餘的身高相同的人會相互阻礙視線,求最少要移出多少人才能滿足要求。首先理解一下題意,拋開背景,題目要求...

poj 1836 動態規劃

題目大意 n個士兵排成一排,不是按照高度順序排列。現在想要從中去掉幾名士兵,從而使得隊伍中剩餘的士兵能夠看到這排最左邊或者最右邊的那個士兵,某士兵能夠看到最左邊 或最右邊 的士兵指這名士兵和最左邊 或最右邊 士兵之間沒有另外一名士兵的高度大於等於這名士兵。題目分析 實現 c include incl...

POJ 1088 滑雪 動規

滑雪 time limit 1000ms memory limit 65536k total submissions 75664 accepted 28044 description michael喜歡滑雪百這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你...