3 条题解

  • 2
    @ 2025-7-31 11:22:27
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e6+520;
    int t,x,y,n,dp[N],maxx,a[N];
    int main(){
    	cin>>t;
    	while(t--){
    		cin>>n;
    		for(int i=1;i<=n;i++)
    		cin>>a[i];
    		for(int i=1;i<=n;i++){
    			dp[i]=1;
    			for(int j=1;j<i;j++)
    			if(a[i]<a[j])
    			dp[i]=max(dp[i],dp[j]+1);
    		maxx=max(maxx,dp[i]);
    	}
    	for(int i=n;i>=1;i--){
    		dp[i]=1;
    		for(int j=n;j>i;j--){
    			if(a[i]<a[j])
    			dp[i]=max(dp[i],dp[j]+1);
    		} 
    		maxx=max(dp[i],maxx);
    	}
    	cout<<maxx<<endl;
    	maxx=0;
    }
    	return 0;
    }
    //唯一
    
    
    • 0
      @ 2026-7-29 19:15:00
      # include <bits/stdc++.h>
      
      using namespace std;
      const int N=1e4+5;
      int a[N],dp[N],n,maxx,dp1[N];
      int main(){
      	int t;
      	cin>>t;
      	while(t--){
      		maxx=INT_MIN;
      		cin>>n;
      		for(int i = 1;i<=n;i++){
      			cin>>a[i];
      			dp[i]=1;
      			for(int j=1;j<i;j++)
      				if(a[i]>a[j])
      					dp[i]=max(dp[i],dp[j]+1);
      			maxx=max(maxx,dp[i]);
      			dp1[i]=1;
      			for(int j=1;j<i;j++)
      				if(a[i]<a[j])
      					dp1[i]=max(dp1[i],dp1[j]+1);
      			maxx=max(maxx,dp1[i]);
      		}
      		cout<<maxx<<endl;
      	}
      	return 0;
      }
      

      这题不是LIS吗

      • -2
        @ 2024-7-14 16:09:41
        #include<bits/stdc++.h>
        using namespace std;
        
        const int N=1e2+10;
        int t,n,dp[N],len,a[N];
        
        void Memset()
        {
        	memset(dp,0,sizeof(0));
        	len=0;
        }
        
        int main()
        {
        	scanf("%d",&t);
        	while(t--)
        	{
        		int ans=0;
        		scanf("%d",&n);
        	    for(int i=1;i<=n;++i)
        	    {
        	    	scanf("%d",&a[i]);
        		}
        		Memset();
        		dp[++len]=a[1];
        		for(int i=2;i<=n;++i)
        		{
        			if(a[i]<dp[len])
        			{
        				dp[++len]=a[i];
        			}
        			else
        			{
        				int upd=lower_bound(dp+1,dp+len+1,a[i],greater<int>())-dp;
        				dp[upd]=a[i];
        			}
        		}
        		ans=max(ans,len);
        		
        		Memset();
        		dp[++len]=a[n];
        		for(int i=n-1;i>=1;--i)
        		{
        			if(a[i]<dp[len])
        			{
        				dp[++len]=a[i];
        			}
        			else
        			{
        				int upd=lower_bound(dp+1,dp+len+1,a[i],greater<int>())-dp;
        				dp[upd]=a[i];
        			}
        		}
        		ans=max(ans,len);
        		printf("%d\n",ans);
        	}
        	return 0;
        }
        
        • 1

        信息

        ID
        3120
        时间
        1000ms
        内存
        256MiB
        难度
        1
        标签
        递交数
        225
        已通过
        68
        上传者