题解 | #合唱队#
合唱队
https://www.nowcoder.com/practice/6d9d69e3898f45169a441632b325c7b4
#include <iostream> #include <vector> using namespace std; int main() { int num,res=0,a; cin>>num; vector<int> row; int dp[num],dp2[num];//dp[i]表示以第i-1位同学作为结尾时的最长递增序列长度 for(int i=0;i<num;i++){ dp[i]=1;//初始值为1 dp2[i]=1; } while(cin>>a)row.push_back(a); for(int i=1;i<num;i++) for(int j=0;j<i;j++) if(row[i]>row[j]) dp[i]=max(dp[j]+1,dp[i]); for(int i=num-1;i>=0;i--) for(int j=num-1;j>i;j--) if(row[i]>row[j]) dp2[i]=max(dp2[j]+1,dp2[i]); for(int i=0;i<num;i++){ if(res<dp[i]+dp2[i]-1) res=dp[i]+dp2[i]-1; } cout<<num-res<<endl; return 0; } // 64 位输出请用 printf("%lld")