超时,大佬求救
查看原帖
超时,大佬求救
1491334
yangrui818楼主2024/12/12 17:27
#include<iostream>
#include<cstring>
using namespace std;
long long num[100001],b[100001],dp[100001],maxn=-1;	
int e=1;
void f(){
	maxn=-1;
	memset(dp,0,sizeof(dp));
	for(int t=e;t>=1;t--){
		if(num[t]!=0){
			for(int u=e;u>=t+1;u--){
				if(num[t]>=num[u]){ 
					if(dp[t]<dp[u]+1){
						dp[t]=dp[u]+1;
					}
				}
			}
			if(dp[t]==0) dp[t]++;
			if(dp[t]>maxn){
				maxn=dp[t];
			}
		}
	}
	cout<<maxn<<endl;
}
int main(){

	int sum=0;
	while(cin>>num[e]) e++;
	f();
	int p=0;
	for(int i=1;i<=e;i++){
		p=0;
		for(int j=1;j<=sum;j++){
			if(num[i]<=b[j]){
				b[j]=num[i];
				p=1;
				break;
			} 
		}
		if(p==0){
			sum++;
			b[sum]=num[i];
		}
	}
	cout<<sum;
	return 0;
}
2024/12/12 17:27
加载中...