虽然过了但感觉好迷

B3637 最长上升子序列

YJK23333 @ 2024-03-22 02:38:42

AC代码:

#include <iostream>
using namespace std;
const int N = 1e5+4;
int n, ans, a[N], f[N];
int main()
{
    cin >> n;
    for(int i = 1 ; i <= n ; i++){
        scanf("%d",&a[i]);
        f[i] = 1;
    }
    for(int i = 2 ; 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(f[i], ans);
    }
    printf("%d",ans);
    return 0;
}

经过修改后过了,原版的有时候能AC有时候只有20分,可能是面对不同的数据会有错误。

#include <iostream>
using namespace std;
int main()
{
    int n, ans;
    cin >> n;
    int a[n+2], f[n+2];
    for(int i = 1 ; i <= n ; i++){
        scanf("%d",&a[i]);
        f[i] = 1;
    }
    for(int i = 2 ; 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(f[i], ans);
    }
    printf("%d",ans);
    return 0;
}

唯一区别是定义数组的时候定义的长度,感觉这个可能对结果有影响?


by Bingxiu @ 2024-03-22 07:03:14

@YJK23333 不是数组大小问题,是局部变量不初始化是随机值(看你电脑上次调用这个内存修改为了什么值)


by zjpwdyf @ 2024-03-22 07:04:02

@YJK23333 不是数组的问题,而是第二份代码中 ans 没有初始化


by YJK23333 @ 2024-03-22 16:41:37

@Bingxiu 好的,谢谢,我试了一下确实没问题了。


by YJK23333 @ 2024-03-22 16:41:52

@zjpwdyf 好的,谢谢,我试了一下确实没问题了。


|