1091 合唱隊形

2022-08-01 07:15:06 字數 1361 閱讀 1638

難度:普及/提高-

題目型別:動規

提交次數:1

涉及知識:線性動規

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

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

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

輸入格式:

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

輸出格式:

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

**:

1 #include2

using

namespace

std;

3int a[105];4

int d1[105];5

int d2[105];6

intn;

7int

main()

15for(i = 0; i < n; i++)

16for(j = 0; j < i; j++)

17if(a[j]18 d1[i] = max(d1[i], d1[j]+1

);19

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

20for(j = n; j > i; j--)

21if(a[i]>a[j])

22 d2[i] = max(d2[i], d2[j]+1

);23

int maxx = 0;24

for(i = 0; i < n; i++)

25 maxx = max(d1[i]+d2[i], maxx);

26 cout<<n-maxx+1;

27return0;

28 }

備註:

十五分鐘寫完一道題∩_∩,對於這種線性動態規劃已經輕車熟路啦。跟登山基本上一模一樣,最長上公升子串行,從前往後找一次再從後往前找一次,最後找乙個最長的「合唱隊形」。注意最後的答案是總人數減去這個隊形人數,而因為隊形人數最高的那人重複算了兩次,所以要加一~

luogu1091合唱隊形

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

P1091 合唱隊形

n位同學站成一排,老師要請其中的 n k 位同學出列,使得剩下的k位同學排成合唱隊形。合唱隊形是指這樣的一種隊形 設k位同學從左到右依次編號為1,2 k,他們的身高分別為t1,t2,tk,則他們的身高滿足t1 ti 1 tk 1 i k 你的任務是,已知所有n位同學的身高,計算最少需要幾位同學出列,...

P1091 合唱隊形

nnn位同學站成一排,老師要請其中的 n kn kn k 位同學出列,使得剩下的kkk位同學排成合唱隊形。合唱隊形是指這樣的一種隊形 設k位同學從左到右依次編號為1,2,k1,2,k1,2,k,他們的身高分別為t1,t2,tkt 1,t 2,t kt1 t2 tk 則他們的身高滿足t1 ti 1 t...