合唱隊形 動態規劃 最長遞增子串行

2021-09-24 23:39:51 字數 1189 閱讀 6973

n位同學站成一排,**老師要請其中的(n-k)位同學出列,使得剩下的k位同學不交換位置就能排成合唱隊形。 合唱隊形是指這樣的一種隊形:設k位同學從左到右依次編號為1, 2, …, k,他們的身高分別為t1, t2, …, tk, 則他們的身高滿足t1 < t2 < … < ti , ti > ti+1 > … > tk (1 <= i <= k)。 你的任務是,已知所有n位同學的身高,計算最少需要幾位同學出列,可以使得剩下的同學排成合唱隊形。

輸入描述:

輸入的第一行是乙個整數n(2 <= n <= 100),表示同學的總數。第一行有n個整數,用空格分隔,第i個整數ti(130 <= ti <= 230)是第i位同學的身高(厘公尺)。

輸出描述:

可能包括多組測試資料,對於每組資料,輸出包括一行,這一行只包含乙個整數,就是最少需要幾位同學出列。

示例1輸入

8186 186 150 200 160 130 197 220輸出4

動態規劃問題,正反兩次運用 lis,即最長遞增子串行。

分別找到左側和右側可以形成隊形的人數,進行加和,由於兩次都包含自身,因此還要再減去1

#include

#include

using namespace std;

int dp1[

101]

;int dp2[

101]

;int high1[

101]

;int high2[

101]

;//本例使用了兩個陣列,在迴圈中同時進行兩個方向的計算

intmain()

dp1[0]

=1; dp2[0]

=1;int ans1, ans2;

for(

int i =

1; i < n; i++)if

(high2[i]

> high2[j])}

dp1[i]

= ans1; dp2[i]

= ans2;

}int result =1;

for(

int i =

0; i < n; i++

) cout << n - result +

1<< endl;

system

("pause");

}

codevs合唱隊形 動態規劃求最長遞增子串行

題目描述 description n位同學站成一排,老師要請其中的 n k 位同學出列,使得剩下的k位同學排成合唱隊形。合唱隊形是指這樣的一種隊形 設k位同學從左到右依次編號為1,2 k,他們的身高分別為t1,t2,tk,則他們的身高滿足t1 ti 1 tk 1 i k 你的任務是,已知所有n位同學...

動態規劃之合唱隊形問題(最長遞增子串行變形)

題目描述 n位同學站成一排,老師要請其中的 n k 位同學出列,使得剩下的k位同學不交換位置就能排成合唱隊形。合唱隊形定義 設k位同學從左到右依次編號為1,2,k,他們的身高分別為t1,t2,tk,則他們的身高滿足t1 t2 ti,ti ti 1 tk 1 i k 要求 已知所有n位同學的身高,計算...

最長遞增子串行 合唱隊形 山峰數列

1.最長單調遞增子串行 從頭部到尾部是嚴格遞增的 單調遞增的輔助陣列sort,k表示陣列sort目前的長度,演算法完成後k的值即為lis的長度。初始化 sort 0 a 0 k 1 從前到後掃瞄陣列a,比較當前的數a i 和sort k 1 如果a i sort k 1 a i 大於sort的最後乙...