華為OJ題目(十一) 合唱隊

2021-07-09 05:46:36 字數 851 閱讀 2718

//合唱隊

/*解題思路:

實際上這是一道簡單動態規劃的題。但是一眼看上去不是很直觀。題目所謂的合唱隊形就是乙個最長上公升子串行的拼接。

只要求出從佇列首到位置 i 的最長上公升子串行長度加上從隊尾開始到位置 i 的最長上公升子串行的長度就能求出合唱隊形的總長度。

我們還知道總的人數,減一下就能得出要出列的人數了。*/

/*求最長上公升子串行:

現在有乙個序列,要求他的最長上公升子串行。直觀上並不是很好求得,反過來看的話就能比較好理解:

現在對於總序列裡的第i個元素來說,包含元素i的最長子序列是多少呢?如果i前面有能構成最長上公升序列的(設它為j),而且i數值比j大,

那很顯然到第i個元素(包含元素i)的最長子序列是到第j個元素的最長子序列 + 1;否則到第i個元素(包含元素i)的最長子序列就是是1。

因為前面沒有比他更小的了,只有自身構成乙個子串行。*/

#include#includeusing namespace std;

#define max 200

int main()

for (int k = n - 1; k >= 0; k--)//求最長下降子串行--或者說從後往前的上公升序列

for (int i = 0; inumber)

number = inc[i] + dec[i];

number = n - number + 1;

cout << number << 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 的最長上公升子串行的長度就能求出合唱隊形的總長度。我們還知道總的人數,減一下就能得出要出列的人數了。求最長...