唔,最长不下降子序列与最长上升子序列曾是困扰蒟蒻多时的一个问题,应该也有一些人分不清这2个的求法吧。
首先n^2算法肯定是都能分清的,因为不下降和上升的区别是连续的2个能不能相等,只需要在判断的时候判一下是不是相等就可以了。
最长不下降子序列代码:
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int n; 5 int a[1100]; 6 int f[1100]; 7 int main() 8 { 9 scanf("%d",&n); 10 for(int i=1;i<=n;++i)scanf("%d",&a[i]); 11 for(int i=1;i<=n;++i) 12 { 13 f[i]=1; 14 for(int j=1;j<i;++j) 15 if(a[i]>=a[j]&&f[j]+1>f[i])f[i]=f[j]+1; 16 } 17 int ans=0; 18 for(int i=1;i<=n;++i) 19 ans=max(ans,f[i]); 20 printf("%d",ans); 21 return 0; 22 }