关于LIS代码的不理解之处

B3637 最长上升子序列

GeXXGe @ 2023-10-09 23:25:56

大佬求问

就是一个普通的最长上升子序列,用dp做,第17行

f[i]=i;

非常不理解,为什么要把所有的dp数组都初始化为1?

初始化为0就40分???

这里0和1有区别吗?

#include <iostream>
#include <cstdio>
using namespace std;
int a[5050];
int f[5050];//f[i]为以i结尾的最长上升子序列长度
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    int x=1;
    for(int i=1;i<=n;i++)
    {
        f[i]=1;
        for(int j=1;j<i;j++)
        {
            if(a[i]>a[j])
            {
                f[i]=max(f[j]+1,f[i]);
            }
        }
        x=max(x,f[i]);
    }
    cout<<x<<endl;
    return 0;
}

by __LePetitPrince__ @ 2023-10-09 23:35:38

@GeXXGe 即使都不行,他自己一个也是一个 LIS,所以至少是 1


by GeXXGe @ 2023-10-10 20:09:34

@LePetitPrince 哦哦哦 我懂了 他如果不执行if就f[i]就没有值对吧 谢谢啦


|