2 条题解

  • 0
    @ 2023-3-14 16:11:01
    #include<......>//懒癌复发
    #define int long long
    #define fo(i,a,b) for(int i=a;i<=b;i++)
    #define rfo(i,a,b) for(int i=a;i>=b;i--)
    using namespace std;
    int n,maxn;
    int a[100001];
    int l[100001];
    int r[100001];
    main(){
    	cin>>n;
    	fo(i,1,n) l[i]=r[i]=1;
    	fo(i,1,n) cin>>a[i];
    	fo(i,2,n){
    		rfo(j,i-1,1){
    			if(a[j]<a[i]){
    				l[i]=max(l[i],l[j]+1);
    			}
    		}
    	}
    	rfo(i,n-1,1){
    		fo(j,i+1,n){
    			if(a[j]<a[i]){
    				r[i]=max(r[i],r[j]+1);
    			}
    		}
    	}
    //	fo(i,1,n){
    //		cout<<l[i]<<' ';
    //	}cout<<endl;
    //	fo(i,1,n){
    //		cout<<r[i]<<' ';
    //	}cout<<endl;
    	fo(i,1,n){
    		maxn=max(maxn,l[i]+r[i]-1);
    	}
    	cout<<n-maxn;//这里被坑了
    }
    
    • -4
      @ 2023-6-23 16:51:34

      #include<bits/stdc++.h> using namespace std; int a[101],f[101],ans=INT_MAX; int main(){ ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); int n;cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; for(int k=1;k<=n;k++){ for(int i=1;i<=k;i++){ f[i]=1; for(int j=1;j<i;j++) if(a[j]<a[i])f[i]=max(f[i],f[j]+1); } for(int i=n;i>k;i--){ f[i]=1; for(int j=n;j>i;j--) if(a[j]<a[i])f[i]=max(f[i],f[j]+1); } int t=0; for(int i=k+1;i<=n;i++) if(a[i]<a[k])t=max(t,f[i]); ans=min(ans,n-f[k]-t); } cout<<ans; return 0; }

      • 1

      信息

      ID
      371
      时间
      1000ms
      内存
      128MiB
      难度
      3
      标签
      递交数
      51
      已通过
      31
      上传者