动态规划c++ ---合唱队列

#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;

struct node
{
  int first;
  int last;

  node (int a,int b)
  :first(a)
  ,last(b)
 
  {}
};
vector<int >m;
vector<node>n;


int main ()
{
 int k;
 while(scanf("%d",&k))
 {
   for(int i=0;i<k;i++)
   {
     int ii;
     cin>>ii;
     m.push_back(ii);
     n.push_back(node(1,0));
   }
   int sum=0;
   for(int i=0;i<k;i++)
   {
     for(int j=0;j<i;j++)
     {
       if(m[i]<=m[j])
       {
         n[i].first=max(n[i].first,n[j].first+1);
       }
     }
    for(int j=k-1;j>i;j--)
    {
      if(m[i]>m[j])
      {
        n[i].last=max(n[i].last,n[j].last+1);
      }
    }
     sum=max(sum,n[i].first+n[i].last);
   }
   cout<<k-sum<<endl;
 }

  system("pause");
  return 0; 
}
发布了22 篇原创文章 · 获赞 1 · 访问量 577

猜你喜欢

转载自blog.csdn.net/baidu_37143827/article/details/104638276