合唱队形(信息学奥赛一本通-T1264)
生活随笔
收集整理的這篇文章主要介紹了
合唱队形(信息学奥赛一本通-T1264)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目描述】
N位同學站成一排,音樂老師要請其中的(N?K)位同學出列,使得剩下的KK位同學排成合唱隊形。
合唱隊形是指這樣的一種隊形:設K位同學從左到右依次編號為1,2,…,K,他們的身高分別為T1,T2,…,TK,則他們的身高滿足T1<T2<…<Ti,Ti>Ti+1>…>TK(1≤i≤K)。
你的任務是,已知所有N位同學的身高,計算最少需要幾位同學出列,可以使得剩下的同學排成合唱隊形。
【輸入】
輸入的第一行是一個整數N(2≤N≤100),表示同學的總數。第二行有n個整數,用空格分隔,第i個整數Ti(130≤Ti≤230)是第i位同學的身高(厘米)。
【輸出】
輸出包括一行,這一行只包含一個整數,就是最少需要幾位同學出列。
【輸入樣例】
8
186 186 150 200 160 130 197 220
【輸出樣例】
4
【源程序】
#include<iostream> using namespace std;int cmp(int x,int y) {if(x>y) return x;else return y; } int dp_rise[10000],dp_fall[10000]; int main() {int n,high[10000];int rise_temp,fall_temp,temp;int max=1;//留下人數int i,j;cin>>n;//人數for(i=1;i<=n;i++) {cin>>high[i];dp_rise[i]=1;dp_fall[i]=1;}for(i=1;i<=n;i++){rise_temp=0;for(j=1;j<i;j++){if(high[i]>high[j]){if(rise_temp<dp_rise[j])rise_temp=dp_rise[j];}}dp_rise[i]=rise_temp+1;}for(i=n;i>=1;i--){fall_temp=0;for(j=n;j>i;j--){if(high[i]>high[j]){if(fall_temp<dp_fall[j])fall_temp=dp_fall[j];}}dp_fall[i]=fall_temp+1;}for(i=1;i<=n;i++){temp=dp_rise[i]+dp_fall[i]-1;max=cmp(max,temp);}cout<<n-max<<endl;return 0; }?
?
?
總結
以上是生活随笔為你收集整理的合唱队形(信息学奥赛一本通-T1264)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 车厢重组(信息学奥赛一本通-T1310)
- 下一篇: 训练日志 2018.12.20