求最长不上升子序列的板子。
这道题,对于最长上升子序列来说,每一个点都只能用一套新的导弹系统来拦截。
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int n=0,a[101],f[101],ans=0;
int main(){
//freopen("a.in","r",stdin);
while(scanf("%d",&a[++n])!=EOF);
n--;
//先求最长不上升子序列。
for(int i=1;i<=n;i++){
f[i]=1;
for(int j=1;j<i;j++){
if(a[i]<=a[j]) f[i]=max(f[i],f[j]+1);
}
}
for(int i=1;i<=n;i++){
ans=max(ans,f[i]);
}
printf("%d\n",ans);
//再求最少系统数=最长上升子序列 。
memset(f,0,sizeof(f));
ans=0;
for(int i=1;i<=n;i++){
f[i]=1;
for(int j=1;j<i;j++){
if(a[i]>a[j]) f[i]=max(f[i],f[j]+1);
}
}
for(int i=1;i<=n;i++){
ans=max(ans,f[i]);
}
printf("%d",ans);
return 0;
}