求最长子序列
#include <bits/stdc++.h>
using namespace std;
int num[1010],f[1010];
int ans=-1;
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>num[i];
for(int i=1;i<=n;i++) f[i]=1;
for(int i=2;i<=n;i++)
for(int j=1;j<i;j++)
if(num[i]>=num[j]&&f[i]<=f[j]) f[i]=f[j]+1;
for(int i=1;i<=n;i++){
if(f[i]>ans) ans=f[i];
}
cout<<ans<<endl;
return 0;
}
最长上升子序列的长度==最长不上升子序列的个数
递减个数==递增长度
#include <bits/stdc++.h>
using namespace std;
const int N=30010;
int num[N],f[N];//f为长度
int main(){
int n;
while(cin>>n){
for(int i=1;i<=n;i++) cin>>num[i];
for(int i=1;i<=n;i++) f[i]=1;
for(int i=2;i<=n;i++)
for(int j=1;j<i;j++)
if(num[i]>num[j]&&f[i]<=f[j]) f[i]=f[j]+1;
int ans=-1;
for(int i=1;i<=n;i++) ans=max(ans,f[i]);
cout<<ans<<endl;
}
return 0;
}