不解:为什么不同的解决方式结果不同
查看原帖
不解:为什么不同的解决方式结果不同
1088949
Painted_pears楼主2024/3/10 20:29

如果以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

2024/3/10 20:29
加载中...