最长上升子序列

https://www.luogu.org/problemnew/show/P1091
安利一波新学到的知识
#include
#include
#include
#include
using namespace std;
int n,a[105],f[2][105];开二维记录坐标,找出最大
int main()
{
int ans=0,i,n,j;
cin >> n;
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
a[0]=0;
for(i=1;i<=n;i++)
for(j=0;j if(a[i]>a[j])
f[0][i]=max(f[0][i],f[0][j]+1);记录每个a【i】的上升序列有多长,要注意条件
a[n+1]=0;
for(i=n;i>=1;i–)
for(j=n+1;j>i;j–)
if(a[i]>a[j]) f[1][i]=max(f[1][i],f[1][j]+1);这个是倒过来求降序
for(i=1;i<=n;i++)
ans=max(ans,f[0][i]+f[1][i]-1);
cout << n-ans << endl;
return 0;
}
模板;
先开个数组,可以一维,可以二维;
在加上下列语句
for(i=1;i<=n;i++)
for(j=0;j if(a[i]>a[j])
f[0][i]=max(f[0][i],f[0][j]+1);

你可能感兴趣的:(最长上升子序列)