6489help
  • 板块学术版
  • 楼主Forever1507
  • 当前回复2
  • 已保存回复2
  • 发布时间2020/9/24 22:47
  • 上次更新2023/11/5 12:40:05
查看原帖
6489help
359614
Forever1507楼主2020/9/24 22:47
#include<bits/stdc++.h>
using namespace std;
int n,h[10005],dp[10005],way[10005],ed,now;
stack<int> stk;
bool node[1000000];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>h[i];
		dp[i]=1;
	}
	int maxi=dp[1],ansss,l=0;
	for(int i=2;i<=n;i++){
		for(int j=1;j<i;j++){
			if(h[i]>h[j]){
				l++;
				if(l==1){
					ansss=j;
				}
			if(dp[j]+1>dp[i]&&node[way[i]-ansss]!=true)
			{
				dp[i]=dp[j]+1;
				way[i]=j;
				node[way[i]-ansss]=true;
				ansss=j;	
			}	
			}
		}
	}
	for(int i=1;i<=n;i++){
		if(dp[i]>maxi){
			maxi=dp[i];
			ed=i;
		} 
	}
	now=ed;
	stk.push(h[now]);
	while(way[now]>=1){
		now=way[now];
		stk.push(h[now]);
	}
	int minn=0,anss=0;
	minn=stk.top();
	while(stk.empty()==false){
		anss=stk.top();
	//	cout<<anss<<" i"<<endl;
		stk.pop();
	}
	if(anss-minn>0)
	cout<<anss-minn;//<<' '<<anss<<' '<<minn
	else
	cout<<0;
	return 0;
}

A一个

2020/9/24 22:47
加载中...