3.合唱队

来源:互联网 发布:ios版cf手游刷枪软件 编辑:程序博客网 时间:2024/05/17 01:56

计算最少出列多少位同学,使得剩下的同学排成合唱队形

说明:

N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。
合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足存在i(1<=i<=K)使得Ti<T2<……<Ti-1Ti+1>……>TK。
你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。

参考代码:

 #include <iostream> #include <algorithm> using namespace std; int main() { int n,arr[100],answer=0; cin>>n; for(int i=0;i<n;i++) cin>>arr[i];  int *listrise=new int[n];       //上升子序列  for (int i=0;i<n;i++) { listrise[i]=1; for (int j=0;j<i;j++) { if ((arr[i]>arr[j])&&(listrise[j]+1>listrise[i])) listrise[i]=listrise[j]+1; } }  int *listdown=new int[n];   //下降子序列 for (int i=n-1;i>=0;i--) { listdown[i]=1; for (int j=n-1;j>i;j--) { if ((arr[i]>arr[j])&&(listdown[j]+1>listdown[i])) listdown[i]=listdown[j]+1; } }  for(int i=0;i<n;i++)   if(listrise[i]+listdown[i]-1>answer)    answer=listrise[i]+listdown[i]-1;   cout<<n-answer<<endl; }


 

0 0
原创粉丝点击