90分,第二个点过不去(我是79,答案78)
查看原帖
90分,第二个点过不去(我是79,答案78)
579457
IWANTDO楼主2022/3/30 21:32
#include<iostream>
#include<algorithm>
using namespace std;
const int INF=10000000;
int arr[105];
int b[105];
int low1[105];//贪心优化
int low2[105];
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;++i)
    {
         cin>>arr[i];
        b[n-i+1]=arr[i];//b为逆序;
    }
   int maxn=0;
    for(int i=0;i<=n;++i)//遍历分界点
    {
          int maxn1=0,maxn2=0;//最长上升和下降
         fill(low1+1,low1+1+n,INF);//初始化low1
         fill(low2+1,low2+1+n,INF);//初始化low2
        for(int j=1;j<=i;++j)//最长上升
        {
           int index=lower_bound(low1+1,low1+1+n,arr[j])-low1;
            low1[index]=arr[j];
            if(index>maxn1)
                maxn1=index;
        }
        for(int k=1;k<=n-i;++k)
        {
            //最长下降
             int index=lower_bound(low2+1,low2+1+n,b[k])-low2;
            low2[index]=b[k];
            if(index>maxn1)
                maxn2=index;       
        }
        if(low1[maxn1]==low2[maxn2])
           maxn=max(maxn,maxn1+maxn2-1);
        else
            maxn=max(maxn,maxn1+maxn2); 
    }  
    cout<<n-maxn<<endl;
}
2022/3/30 21:32
加载中...