Painted_pears @ 2024-03-10 20:29:00
如果以sort排序在存储最长序列的f[i]中找到最大值(代码如下)只有四十分
#include<bits/stdc++.h>
using namespace std;
int a[100001],f[100001],len=0;
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
f[1]=1;
for(int i=2;i<=n;i++){
for(int j=1;j<=i-1;j++){
if(a[i]>a[j]) f[i]=max(f[i],f[j]+1);
}
}
sort(f+1,f+n+1);
cout<<f[n];
return 0;
}
但是用循环一层层寻找其中的最大值可以得到满分
#include<bits/stdc++.h>
using namespace std;
int a[100050],f[100050],maxn=0;
int main(){
int n;
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[i]>a[j]) f[i]=max(f[i],f[j]+1);
}
}
for(int i=1;i<=n;i++) maxn=max(maxn,f[i]);
cout<<maxn;
return 0;
}
请问dalao们这两种方法时间都不会爆啊,有什么区别吗qwq
by rant @ 2024-03-21 19:23:30
要加这个for(int i=1;i<=n;i++) f[i] = 1; 一开始要将所有的都初始化为1, 你可以试试这个样例:3 : 3 1 2 你就发现第一个错了。