演算法 合唱隊形(最大上公升子串行,線性DP)

2021-10-17 18:34:38 字數 1107 閱讀 2310

有乙個佇列,下標從1開始儲存。用f[i]代表i點結尾的最大上公升子串行的長度。

採用遞迴的思想,從隊的最左邊開始,由於自身,所以以最左邊一點結尾的最大上公升子串行為1,故f[1] = 1。以第二點結尾的最大上公升子串行當w[1] < w[2]時,f[2] = max(f[2], f[1] + 1)。f[1] + 1 代表的是以1結尾的最大上公升子串行加上當前這個點。

一般地,f[i] = max(f[i], f[j] + 1)

for

(int i =

1; i <= n; i ++

)

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

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

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

輸入的第一行是乙個整數n,表示同學的總數。

第二行有n個整數,用空格分隔,第i個整數ti是第i位同學的身高(厘公尺)。

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

2≤n≤100,

130≤ti≤230

8186 186 150 200 160 130 197 220

#include

using

namespace std;

int w[

110]

;int f[

110]

, g[

110]

;int

main()

for(

int i =

1; i <= n;

++i)

}for

(int i = n; i; i--)}

}int res =0;

for(

int i =

1; i <= n;

++i)

cout << n - res << endl;

return0;

}

原題鏈結

線性dp 合唱隊形 最長上公升子串行模型

相關 線性dp 最長上公升子串行 模板題 最長上公升子串行模型 線性dp 怪盜基德的滑翔翼 最長上公升子串行模型 強相關 線性dp 登山 最長上公升子串行模型 482.合唱隊形 重點 線性dp lis問題 思路 本題為noip2004提高組原題。正反兩遍再求和 include include usi...

合唱隊形 最長上公升子串行變形

一 思路 感覺自己好笨 雖然知道是求兩次最長上公升子串行,一邊上公升,一邊下降 我愣是理解成了,寫兩個,都是順序來,乙個是求順序的最長上公升 乙個是順序的最長下降 怎麼除錯都是20 40個得分點 鬱悶了求兩次 成開口向下的拋物線 順序求上公升 逆序求上公升 然後求max aup i areverse...

百煉2711 合唱隊形(最長上公升子串行)

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