2023年分割槽聯賽提高組之三 合

2021-07-11 02:00:05 字數 1480 閱讀 3901

description

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

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

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

input

輸入的第一行是乙個整數n(2<=n<=100),表示同學的總數。第一行有n個整數,用空格分隔,第i個整數ti(130<=ti<=230)是第i位同學的身高(厘公尺)。

output

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

sample input

186 186 150 200 160 130 197 220

sample output

4

hint

對於50%的資料,保證有n<=20; 

對於全部的資料,保證有n<=100。 

解題思路:

b[i]

表示同學

1..i

之間(包括

i)身高滿足遞增順序的最多人數,狀態轉移方程為:

b[i]=max+1(當a[i]>a[j]時)(1<=j<=i-1<=n)

c[i]表示同學n..i之間(包括i)身高滿足遞增順序的最多人數,狀態轉移方程為:

c[i]=max+1 (當a[i]>a[j]時)(1<=i+1<=j<=n)

合唱隊人數為

max-1

(1<=i<=n)

程式:var

a,b,c:array[0..100]of longint;

n,i,j,max:longint;

begin

readln(n);

for i:=1 to n do

read(a[i]);

for i:=1 to n do

begin

b[i]:=1;

for j:=1 to i-1 do

if (a[i]>a[j]) and (b[j]+1>b[i]) then b[i]:=b[j]+1;

end;

for i:=n downto 1 do

begin

c[i]:=1;

for j:=i+1 to n do

if (a[j]

c[i]) then c[i]:=c[j]+1;

end;

for i:=1 to n do

if b[i]+c[i]>max then max:=b[i]+c[i];

writeln(n-max+1);

end.

版權屬於: chris

2023年分割槽聯賽提高組之三 合唱隊形 dp

2004年分割槽聯賽提高組之三 合唱隊形 description n位同學站成一排,老師要請其中的 n k 位同學出列,使得剩下的k位同學排成合唱隊形。合唱隊形是指這樣的一種隊形 設k位同學從左到右依次編號為1,2 k,他們的身高分別為t1,t2,tk,則他們的身高滿足t1 ti 1 tk 1 i ...

2023年分割槽聯賽提高組之三 挖地雷

題目 description 在乙個地圖上有n個地窖 n 20 每個地窖中埋有一定數量的地雷。同時,給出地窖之間的連線路徑。例如 k1 k2,kv 挖地雷的順序 max 挖地雷的數量 作者思路 最 長 路。遞推公式 f i max v i var x,f,v array 0.21 of longin...

2023年分割槽聯賽普級組之三 採藥

description 辰辰是個天資聰穎的孩子,他的夢想是成為世界上最偉大的醫師。為此,他想拜附近最有威望的醫師為師。醫師為了判斷他的資質,給他出了乙個難題。醫師把他帶到乙個到處都是草藥的山洞裡對他說 孩子,這個山洞裡有一些不同的草藥,採每一株都需要一些時間,每一株也有它自身的價值。我會給你一段時間...