華為oj 合唱隊

2021-07-09 03:42:30 字數 581 閱讀 9880

這個題目可以分解成正序和逆序的最大上公升子串行的問題來處理,對每個數字存放以當前數字為結尾時的最大上公升子串行數,只需要對前面的每個數進行比較,找到比當前數字小的數字,並且上公升子串行長度最大的作為當前的最大值,即for(i=1;ia[j]&&dp[j]+1>dp[i]) dp[i] = dp[j]+1;}最後對每個數字遍歷,找到dp[i]+lp[i]最大的值,這個i其實就是最高頂點。然後用總長n-dp[i]-lp[i]+1,加1是因為中間最高的數字被算了兩次

#include#include#define n 100

using namespace std;

//個人覺得是用兩次最長公升序子串行的演算法來求

int main()

/*for(int i = 0;ia[j]&&dp[j]+1>dp[i])

dp[i] = dp[j]+1; }}

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

}int count = 0;

for(int i = 0;icount)

count = lp[i]+dp[i];

}int result = n- count+1;

cout<

華為OJ合唱隊

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

華為OJ 合唱隊

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

華為OJ 初級 合唱隊

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