求dalao指教
查看原帖
求dalao指教
71168
yizimi远欣楼主2018/2/23 15:36

不知道为什么一个上升一个下降就不行,倒序上升就可以,,,

#include<bits/stdc++.h>
using namespace std;
#define mn 105
#define go(i,j,n,k) for(int i=j;i<=n;i+=k) 
#define fgo(i,j,n,k) for(int i=j;i>=n;i-=k)
inline int read(){
	int x=0,f=1;char ch=getchar();
	while(ch>'9' || ch<'0'){if(ch=='0')f=-f;ch=getchar();} 
	while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
int n;
int a[mn],f[mn],g[mn],ans=0;
int main(){
	n=read();
	go(i,1,n,1){
		a[i]=read();
	}
	a[0]=0,a[n+1]=0;
	go(i,1,n,1){
		go(j,0,i-1,1){
			if(a[i]>a[j]){
				f[i]=max(f[i],f[j]+1);
			}
		}
	}
	/*
	go(i,1,n,1){
		go(j,i+1,n+1,1){
			if(a[i]<a[j]){
				g[i]=max(g[i],g[j]+1);
			}
		}//这里是直接下降
	}*/
	fgo(i,n,0,1){
		fgo(j,n+1,i+1,1){
			if(a[i]>a[j]){
				g[i]=max(g[i],g[j]+1);
			}
		}
	}//倒序上升
	go(i,1,n,1){
		ans=max(f[i]+g[i]-1,ans);
	}
	cout<<n-ans;
	return 0;
}
2018/2/23 15:36
加载中...