華為OJ 初級 合唱隊

2021-07-16 17:28:03 字數 1104 閱讀 9863

題目描述

計算最少出列多少位同學,使得剩下的同學排成合唱隊形

說明:n位同學站成一排,**老師要請其中的(n-k)位同學出列,使得剩下的k位同學排成合唱隊形。 

合唱隊形是指這樣的一種隊形:設k位同學從左到右依次編號為1,2…,k,他們的身高分別為t1,t2,…,tk,   則他們的身高滿足存在i(1<=i<=k)使得titi+1>......>tk。 

你的任務是,已知所有n位同學的身高,計算最少需要幾位同學出列,可以使得剩下的同學排成合唱隊形。 

輸入描述:

整數n

輸出描述:

最少需要幾位同學出列

輸入例子:

8

186 186 150 200 160 130 197 200

輸出例子:

4
對於每個位置求出左邊最長遞增子串行,右邊最長遞增子串行,求得2者最大值,用總人數減即可
#include#includeusing namespace std;

int main()

} int ans = 0;

for (int i = 0; ians)//l 與rz中多出乙個當前位置故減 1

ans = l[i] + r[i] - 1;

} cout << n - ans << endl;

return 0;

}

最近的寫法

#includeusing namespace std;

int main()

r[n-1]=0;

for (int i = n -2; i >= 0; i--)//只統計小的,不包含本身

}int ans = 0;

l[0]=0;

for (int i = 1; i < n; i++)

if (l[i] + r[i] + 1>ans)

ans = l[i] + r[i] + 1;

} cout << n - ans << endl;

} return 0;

}

華為OJ合唱隊

描述 計算最少出列多少位同學,使得剩下的同學排成合唱隊形 說明 n位同學站成一排,老師要請其中的 n k 位同學出列,使得剩下的k位同學排成合唱隊形。合唱隊形是指這樣的一種隊形 設k位同學從左到右依次編號為1,2 k,他們的身高分別為t1,t2,tk,則他們的身高滿足存在i 1 i k 使得titi...

華為oj 合唱隊

這個題目可以分解成正序和逆序的最大上公升子串行的問題來處理,對每個數字存放以當前數字為結尾時的最大上公升子串行數,只需要對前面的每個數進行比較,找到比當前數字小的數字,並且上公升子串行長度最大的作為當前的最大值,即for i 1 ia j dp j 1 dp i dp i dp j 1 最後對每個數...

華為OJ 合唱隊

解題思路 實際上這是一道簡單動態規劃的題。但是一眼看上去不是很直觀。題目所謂的合唱隊形就是乙個最長上公升子串行的拼接。只要求出從佇列首到位置 i 的最長上公升子串行長度加上從隊尾開始到位置 i 的最長上公升子串行的長度就能求出合唱隊形的總長度。我們還知道總的人數,減一下就能得出要出列的人數了。求最長...