九度 1131 合唱隊形

2021-07-22 01:45:25 字數 1332 閱讀 5384

題目1131:合唱隊形

時間限制:1 秒

記憶體限制:32 兆

特殊判題:否

提交:3549

解決:1104

題目描述: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位同學的身高(厘公尺)。

輸出:可能包括多組測試資料,對於每組資料,

輸出包括一行,這一行只包含乙個整數,就是最少需要幾位同學出列。

樣例輸入:

8

186 186 150 200 160 130 197 220

樣例輸出:

4
題目的描述也比較清楚,需要找從前往後遞增,並從該結束點開始從前往後遞減。

使用兩個最長不下降序列,乙個表示從前往後不下降,另乙個表示從後往前不下降。

例如對於圖:

我們希望這樣乙個序列的長度是最長的。

很顯然利用最長不下降序列dp可以得到從前往後的最長遞增序列。

dp[i]表示前i個資料最長不下降序列的長度,對於第i個資料,它應當比前面某乙個元素高才能形成以a[i]結尾的最長不下降序列。

於是我們遍歷0~i-1的元素,找到a[j]dp[i]的資料,更新dp[i].

因為前面最長的序列+a[i]的長度已經是這一段最長,所以之後出現的元素不影響這乙個位置最長不下降序列長度的大小;

總體空間複雜度o(n) 時間複雜度o(n^2)

#include#include#include#include#include#include#define n 101

using namespace std;

int main()

} for(int i=n-1;i>=0;i--)

} int maxv=1;

for(int i=0;i

九度OJ 1131 合唱隊形

這是一道最長遞增子串行加強版。只需計算以a i 為結尾的最長遞增子串行,以a i 為開頭的最長遞減子串行 這個實際就是逆序後的以a i 為結尾最長遞增子串行嘛!兩個部分 for i 1 ia j f1 j 1 max f1 i max for i n 2 i 0 i f2 i max 我一開始犯了乙...

九度OJ 題目1131 合唱隊形

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

1131 合唱隊形

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