标签:
7 1 7 3 5 9 4 8
4
#include<cstdio> #include<iostream> #include<cstring> using namespace std; int a[1010],f[1010],n,maxn; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); f[i]=1; } for(int i=2;i<=n;i++) for(int j=1;j<=i-1;j++) if(a[i]>a[j]) f[i]=max(f[j]+1,f[i]); for(int i=1;i<=n;i++) maxn=maxn>f[i]?maxn:f[i]; printf("%d",maxn); return 0; }
2、
#include<cstdio> using namespace std; int f[9999]; int a[9999],ans,n; int main() { f[1]=1; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=2;i<=n;i++) { for(int j=1;j<i;j++) if(a[j]<a[i]&&f[j]>f[i]) f[i]=f[j]; f[i]++; } ans=f[1]; for(int i=1;i<=n;i++) ans=ans>f[i]?ans:f[i]; printf("%d",ans); return 0; }
3、
#include<iostream> using namespace std; #include<cstdio> const int INF=10001; #include<cstring> const int N=1001; long long a[N],c[N],f[N]; int search(int l,int r,int i)/*二分查找*/ { if(l==r) return l; int mid=(l+r+1)/2; if(c[mid]>=a[i]) return search(l,mid-1,i);/*等号加到上面是上升序列*/ if(c[mid]<a[i]) return search(mid,r,i);/*等号加到下面是不下降*/ } int main() { int n; scanf("%d",&n); for(int i=1;i<=n;++i) scanf("%d",&a[i]); memset(c,127,sizeof(c)); long long int MAX=-INF; for(int i=1;i<=n;++i) { f[i]=search(0,i,i)+1; c[f[i]]=min(c[f[i]],a[i]); MAX=max(f[i],MAX); } printf("%d\n",MAX); return 0; }
标签:
原文地址:http://www.cnblogs.com/shenben/p/5564854.html