2 solutions

  • 1
    @ 2024-1-28 11:19:22

    AC呆马:

    #include<bits/stdc++.h>
    using namespace std;
    
    const int maxn = 1e3 + 5;
    int h[maxn],f[maxn],g[maxn], ans = -1, n;
    
    int main()
    {
    	cin >> n;
    	for(int i = 1; i <= n; i++)
    		cin >> h[i];
    	f[1] = 1;
    	g[n] = 1;
    	
    	for(int i = 2; i <= n; i++)
    	{
    		f[i] = 1;
    		for(int j = 1; j < i; j++)
    		{
    			if(h[j] < h[i])
    				f[i] = max(f[i], f[j] + 1);
    		}
    	}
    	
    	for(int i = n - 1; i >= 1; i--)
    	{
    		g[i] = 1;
    		for(int j = n; j > i; j--)
    		{
    			if(h[j] < h[i])
    				g[i] = max(g[i], g[j] + 1);
    		}
    	}
    	for(int i = 1; i <= n; i++)
    		ans = max(f[i] + g[i] - 1, ans);
    	cout << n - ans;
    	return 0;
    }
    

    需要自取,留个赞谢谢!!

    • 0
      @ 2024-4-18 13:29:11
      #include <iostream>
      using namespace std;
      int n,ans=-1;
      int t[114514];
      int dp1[114514],dp2[114514];
      int main()
      {
      	cin>>n;
      	for(int i=1;i<=n;i++)
      	{
      		cin>>t[i];
      	}
      	dp1[1]=1;
      	dp2[n]=1;
      	for(int i=2;i<=n;i++)
      	{
      		dp1[i]=1;
      		for(int j=1;j<i;j++)
      		{
      			if(t[j]<t[i])
      			{
      				dp1[i]=max(dp1[i],dp1[j]+1);
      			}
      		}
      	}
      	for(int i=n-1;i>=1;i--)
      	{
      		dp2[i]=1;
      		for(int j=n;j>i;j--)
      		{
      			if(t[j]<t[i])
      			{
      				dp2[i]=max(dp2[i],dp2[j]+1);
      			}
      		}
      	}
      	for(int i=1;i<=n;i++)
      	{
      		ans=max(ans,dp1[i]+dp2[i]-1);
      	}
      	cout<<n-ans;
      	return 0;
      }
      
      • 1

      Information

      ID
      749
      Time
      1000ms
      Memory
      256MiB
      Difficulty
      5
      Tags
      # Submissions
      105
      Accepted
      44
      Uploaded By