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]就没有值对吧 谢谢啦