n位同學站成一排,**老師要請其中的(n-k)位同學出列,使得剩下的k位同學不交換位置就能排成合唱隊形。 合唱隊形是指這樣的一種隊形:設k位同學從左到右依次編號為1, 2, …, k,他們的身高分別為t1, t2, …, tk, 則他們的身高滿足t1 < t2 < … < ti , ti > ti+1 > … > tk (1 <= i <= k)。 你的任務是,已知所有n位同學的身高,計算最少需要幾位同學出列,可以使得剩下的同學排成合唱隊形。動態規劃問題,正反兩次運用 lis,即最長遞增子串行。輸入描述:
輸入的第一行是乙個整數n(2 <= n <= 100),表示同學的總數。第一行有n個整數,用空格分隔,第i個整數ti(130 <= ti <= 230)是第i位同學的身高(厘公尺)。
輸出描述:
可能包括多組測試資料,對於每組資料,輸出包括一行,這一行只包含乙個整數,就是最少需要幾位同學出列。
示例1輸入
8186 186 150 200 160 130 197 220輸出4
分別找到左側和右側可以形成隊形的人數,進行加和,由於兩次都包含自身,因此還要再減去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的最後乙...