weinan030416

导航

最长增加子数组

子串

要求一定要挨着

12
1 2 3 4 3 2 1 4 5 6 7 8

结果  6

#include<bits/stdc++.h>
using namespace std;
//最长连续增加子串 
int a[100],dp[100],maxn=0;
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        dp[i]=1;
    }
    
    for(int i=2;i<=n;i++)
    {
        if(a[i]>a[i-1])
        {
           dp[i]=dp[i-1]+1;
        }
        else
        dp[i]=1;
        if(dp[i]>maxn)
            maxn=dp[i];
    }
    
    cout<<"dp"<<endl;
    for(int i=1;i<=n;i++)
    cout<<dp[i]<<" ";
    cout<<endl;
    
    cout<<maxn;
}

 

子序列

不一定挨着

12
1 2 3 4 3 2 1 4 5 6 7 8

结果

8

#include<bits/stdc++.h>
using namespace std;
//最长连续增加子序列 ,不一定连续 
int a[100],dp[100],maxn=0;
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    cin>>a[i];
    int maxn=0;
    for(int i=1;i<=n;i++)
    {
           for(int j=1;j<i;j++)
           {
               int t=0; 
               t=dp[j];
               if(a[j]<a[i])
                   t++;
               if(t>dp[i])
                dp[i]=t;
        }
        if(dp[i]>maxn)
            maxn=dp[i];
   }
   cout<<maxn;
}

 

posted on 2023-02-08 23:27  楠030416  阅读(10)  评论(0编辑  收藏  举报