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