最后一个点WA了

B3637 最长上升子序列

Etic_HAO @ 2022-11-28 12:48:45

#include <bits/stdc++.h>
using namespace std;

int a[6000],ans[6000],i,j,maxn=0;

int main()
{
    int n;
    cin>>n;
    for(i=0;i<1000;i++)
    ans[i]=1;
    for(i=0;i<n;i++)
    {
        cin>>a[i]; 
    }
    for(i=n-1;i>=0;i--)
    {
        for(j=n-1;j>i;j--)
        {
            if(a[i]<a[j])
            if(ans[j]>maxn)maxn=ans[j];
        }
        ans[i]+=maxn;
        maxn=0;
    }
    for(i=0;i<n;i++)
    {
        if(ans[i]>maxn)maxn=ans[i];
    }
    cout<<maxn;
    return 0;
}

Thanks


by Foggy_night @ 2022-11-28 12:59:28

dp会用的话

    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i],f[i]=1;
    for(int i=1;i<=n;i++)
        for(int j=1;j<i;j++){
            if(a[j]<a[i])
                f[i]=max(f[i],f[j]+1);
            ans=max(ans,f[i]);
        }

by Foggy_night @ 2022-11-28 13:00:39

那样“打擂台”很累


by MTFlowCzq @ 2022-12-02 21:49:09

ans[i] 初始化成1的时候,循环范围小了

把 for(i=0;i<1000;i++) 中的1000改成6000

这样就能过了,亲测有效


by MTFlowCzq @ 2022-12-02 21:52:27

是不是因为数组开小了,改数组大小的时候忘了在初始化 ans 数组的时候改啊


|