N位同學(xué)站成一排,音樂老師要請其中的(N-K)位同學(xué)出列,使得剩下的K位同學(xué)不交換位置就能排成合唱隊(duì)形。合唱隊(duì)形是指這樣的一種隊(duì)形:設(shè)K位同學(xué)從左到右依次編號(hào)為1,2,…,K,他們的身高分別為T1,T2,…,TK(身高單位:厘米),則他們的身高滿足T1<T2<…<Ti,Ti>Ti+1>…>TK(1<=i<=K)。你的任務(wù)是,已知所有N位同學(xué)的身高,計(jì)算最少需要幾位同學(xué)出列,可以使得剩下的同學(xué)排成合唱隊(duì)形。
算法思路:首先計(jì)算每個(gè)數(shù)在最大遞增子串中的位置,并計(jì)算該數(shù)左側(cè)連續(xù)遞增子串的個(gè)數(shù)(包括其本身),以數(shù)列中數(shù)據(jù)a(5)160為例,它產(chǎn)生的遞增計(jì)數(shù)為2,因?yàn)槠渥畲蟮倪f增子串為{150,160};然后計(jì)算反向后每個(gè)數(shù)在最大遞減子串中的位置,并計(jì)算該數(shù)右側(cè)連續(xù)遞減子串的個(gè)數(shù)(包括其本身),以數(shù)列中數(shù)據(jù)a(5)160為例,它產(chǎn)生的遞減計(jì)數(shù)為2,因?yàn)槠渥畲蟮倪f減子串為{160,130},然后將每個(gè)數(shù)的遞增計(jì)數(shù)和遞減計(jì)數(shù)相加:數(shù)列中數(shù)據(jù)a(5)160遞增計(jì)數(shù)是2,遞減計(jì)數(shù)也為2,在計(jì)算合唱隊(duì)伍中多計(jì)算一位同學(xué),因此,以a(5)160為中心的合唱隊(duì)伍為3位同學(xué),那么至少有5位同學(xué)出列。
公式為:總?cè)藬?shù)-該數(shù)所在隊(duì)列人數(shù)+1=需要出隊(duì)的人數(shù)。
數(shù)列 |
186 |
186 |
150 |
200 |
160 |
130 |
197 |
200 |
遞增計(jì)數(shù): |
1 |
1 |
1 |
2 |
2 |
1 |
3 |
4 |
遞增計(jì)數(shù) |
3 |
3 |
2 |
3 |
2 |
1 |
1 |
1 |
每個(gè)數(shù)在所在隊(duì)列的人數(shù) |
4 |
4 |
3 |
5 |
4 |
2 |
4 |
5 |
最后需要對(duì)每個(gè)同學(xué)身高數(shù)據(jù)為中心基準(zhǔn)進(jìn)行枚舉,找出至少需要出隊(duì)人數(shù)值的最小值即為答案。如以下數(shù)據(jù),最少需要出隊(duì)的人數(shù)為4人
186 |
186 |
150 |
200 |
160 |
130 |
197 |
200 |
(1)現(xiàn)有以下11位同學(xué),身高分別為195,186,188,174,175,198,160,198,200,195,162厘米,按
照以上算法思路,最少需要
5
5
位同學(xué)出列,可以使得剩下的同學(xué)排成合唱隊(duì)形。
(2)為實(shí)現(xiàn)以上功能,同學(xué)的身高數(shù)據(jù)從stuh。mdb數(shù)據(jù)庫中數(shù)據(jù)表讀取,身高數(shù)據(jù)存放于數(shù)據(jù)表第三個(gè)字段中,該字段的數(shù)據(jù)類型為整型。請?jiān)跈M線處填入合適的代碼