题解 | #合唱队#
合唱队
https://www.nowcoder.com/practice/6d9d69e3898f45169a441632b325c7b4
动态规划,借鉴大佬的思路。
#include <iostream> #include<vector> using namespace std; int main() { int num=0; cin>>num; int temp; vector<int> mem; vector<int> dp1(num,0); vector<int> dp2(num,0); dp1[0]=1; dp2[0]=1; while(cin>>temp){ mem.push_back(temp); } for(int right=0;right<num;right++){ dp1[right]=1; for(int left=0;left<right;left++){ if(mem[right]>mem[left]){ dp1[right]=max(dp1[left]+1,dp1[right]); } } } for(int left=num-1;left+=0;left--){ dp2[left]=1; for(int right=num-1;right>left;right--){ if(mem[left]>mem[right]){ dp2[left]=max(dp2[left],dp2[right]+1); } } } int max=0; for(int i=0;i<num;i++){ max=std::max(max,dp1[i]+dp2[i]-1); } cout<<num-max; } // 64 位输出请用 printf("%lld")