40分!求助!

B3637 最长上升子序列

kbl_sxm1696DEshen @ 2024-09-11 19:46:53

为蛤不对呢?明明挺对的呀~【帮忙调调谢谢啦~ 附上代码:

#include<bits/stdc++.h>
using namespace std;
//最长上升子序列
const int N=3e5+10;
int a[N],b[N],f[N];
int main(){
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    for(int i=1;i<=n;i++){f[i]=1; b[i]=a[i];}
    for(int i=1;i<=n;i++)
        for(int j=1;j<i;j++)
            if(b[j]<a[i])
                f[i]=max(f[j]+1,f[i]);
    cout<<f[n]<<endl;
    return 0;
}

求调!


by 违规用户名K&xs3Z^ @ 2024-09-11 19:56:26

@kbl_sxm1696DEshen 除非用一维滚动数组 不然结果不一定在f[n]中 所以每次比较当前的长度

#include<bits/stdc++.h>
using namespace std;
//最长上升子序列
const int N=3e5+10;
int a[N],b[N],f[N],maxn=-1;
int main(){
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    for(int i=1;i<=n;i++){f[i]=1; b[i]=a[i];}
    for(int i=1;i<=n;i++)
        for(int j=1;j<i;j++){

            if(b[j]<a[i])
                f[i]=max(f[j]+1,f[i]);
            maxn=max(maxn,f[i]);
            }
    cout<<maxn<<endl;
    return 0;
   求关
}

by litangzheng @ 2024-09-11 20:03:47

有很大的问题:

1.开一个数组就够了。 2.结尾是最后一个数的序列不一定是最长的。比如1,3,2这个序列。

(如果AC了,能关注我吗)


by zhizhenyaohanyu @ 2024-09-11 20:21:27

@违规用户名K&xs3Z^ 厉害


by kbl_sxm1696DEshen @ 2024-09-12 19:49:21

嗯嗯,很谢谢大家【AC了也都关注啦咱们互关吧~


|