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了也都关注啦咱们互关吧~