题目网址: http://noi.openjudge.cn/ch0206/1996/
最长上升子序列问题
不能用reverse 因为一旦反转,本来第n个点就变成第一个点了,g[1]就变成f[n]了,会麻烦些
怪盗基德那道题之所以能变,是因为让求得是最值
#include<bits/stdc++.h> using namespace std; const int N=1010; int n; int a[N]; int res; int main() { int f[N],g[N]; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) { f[i]=1; for(int j=1;j<i;j++) if(a[j]<a[i]) f[i]=max(f[i],f[j]+1); //这是最长上升子序列的板子 } for(int i=n;i>=1;i--) { g[i]=1; for(int j=n;j>i;j--) if(a[j]<a[i]) g[i]=max(g[i],g[j]+1); } for(int i=1;i<=n;i++) res=max(res,f[i]+g[i]-1); cout<<res; return 0; }
标签:登山,dp3,cn,int,--,基德 From: https://www.cnblogs.com/tolter/p/16742682.html