文章

99

粉丝

120

获赞

8

访问

137.9k

头像
1253 合唱队形
综合
发布于2024年3月22日 14:06
阅读数 1.8k

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int n,a[105],dp_h[105],dp_t[105];
  4. int main(){
  5. while(cin>>n){
  6. for(int i=0;i<n;i++){
  7. cin>>a[i];
  8. }
  9. //从前往后找以a[i]结尾的最长上升子序列,存入dp_h
  10. for(int i=0;i<n;i++){
  11. dp_h[i]=1;
  12. for(int j=0;j<i;j++){
  13. if(a[j]<a[i]){
  14. dp_h[i] = max(dp_h[j]+1,dp_h[i]);
  15. }
  16. }
  17. }
  18. //从后往前找以a[i]结尾的最长上升子序列,存入dp_t
  19. for(int i=n-1;i>=0;i--){
  20. dp_t[i]=1;
  21. for(int j=i+1;j<n;j++){
  22. if(a[j]<a[i]){
  23. dp_t[i] = max(dp_t[j]+1,dp_t[i]);
  24. }
  25. }
  26. }
  27. int maxn=0;
  28. for(int i=0;i<n;i++){
  29. maxn=max(maxn,dp_h[i]+dp_t[i]);
  30. }
  31. maxn=maxn-1;//a[i]前后都被计算了,多算了一次所以要减1
  32. cout<<n-maxn<<endl;
  33. }
  34. return 0;
  35. }

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发