八十分求助

B3637 最长上升子序列

zhujiajun2013 @ 2024-01-20 07:51:23


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

by zhujiajun2013 @ 2024-01-20 07:57:04

评测记录


by sbno333 @ 2024-01-20 08:13:56

循环和输入中间加一句dp[1]=1就过了,以后初始化要注意严谨,而且建议先自己调。


by zhujiajun2013 @ 2024-01-21 07:53:00

谢谢?


by lrb20120825 @ 2024-01-25 10:58:09

@SBAAAA0 ```c

include<iostream>

using namespace std;
const int maxn=12e5; int n,ans,a[maxn],f[maxn];
int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>a[i];
} for(int i=1;i<=n;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=1;i<=n;i++)ans=max(ans,f[i]);
cout<<ans;  

}


by zhujiajun2013 @ 2024-01-25 16:40:12

@lrb20120825 已经过了谢谢


|