题目描述
光头强打算从山脚到山顶修一条栈道,让游人可以拾阶而上。为了保证栈道不过于陡峭下一步台阶不能高于当前台阶一个单位的高度,当然下一个台阶同当前台阶持平是允许的。按照位置给出地形高度,希望可以选择最多的支点修建栈道,这样栈道更为稳定。那些没有被选择的点,可以实施魔法,让其消失。求修建这样的栈道最多可以选择多少个支点?
输入格式
输入文件名:way.in
第一行,一个整数N。
第二行,N个非负整数(<=1000000)。
加粗样式输出格式
输出文件名:way.out
一个整数,意义如题所述,修建这样的栈道最多可以选择支点数。
输入输出样例
————————————————
输入样例1:
10
1 6 2 9 2 8 3 7 4 5
输出样例1:
6
说明
【数据范围】
N<=3000
【解析】
合肥各区近几年常考的一道模板题—最长上升子序列问题。
按照模板代码抄就行。
#include <iostream>
using namespace std;
const int N=5000;
int a[N],dp[N];
int main()
{
int n;
cin>>n;
int maxn=0;
for(int i=1;i<=n;i++){
int x;
cin>>a[i];
dp[i]=1;
for(int j=i-1;j>=1;j--){
if(a[i]-a[j]==0||a[i]-a[j]==1){
dp[i]=max(dp[i],dp[j]+1);
}
}
maxn=max(maxn,dp[i]);
}
cout<<maxn;
return 0;
}