- 正向反向最长上升子序列。
- 就可以知道以自己为主的序列长度。
- 分别迭代以自己为中心得队列长度,找到那个最大的。
- 结果就是最小要退出得。
- 注意:一些常见得算法,在笔试中经常在赋予每个步骤意义。
#include<bits/stdc++.h> using namespace std; int main(){ int N; while(cin>>N){ vector<int> singers; for(int i =0; i< N; i++){ int sin; cin>>sin; singers.push_back(sin); } //最长上升子序列 vector<int> numL(N,1); vector<int> numR(N,1); for(int i = 1; i< N;i++){ for(int j = 0; j< i;j++){ if(singers[j]<singers[i]&& numL[i] < numL[j]+1){ numL[i] = numL[j] + 1; } } } for(int i = N-2; i >= 0;i--){ for(int j = N-1; j > i;j--){ if(singers[j]<singers[i]&& numR[i] < numR[j]+1){ numR[i] = numR[j] + 1; } } } vector<int> res; for(int i = 0; i< N; i++){ res.push_back(numR[i]+numL[i]-1); } int max_ = 1; for(int i =0; i< N;i++){ if(res[i]>max_){ max_ = res[i]; } } cout<< N- max_<<endl; } return 0; }