最大上升子序列的问题,先从左边找上升序列,再由右边找上升序列,第一次就ac了
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int main()
{
int j,i,n,s[110],a[110],b[110],max=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&s[i]);
a[i]=1;
b[i]=1;
}
for(i=0;i<n;i++)//从左边
{
for(j=i+1;j<n;j++)
{
if(s[j]>s[i]&&a[j]<a[i]+1)
a[j]=a[i]+1;
}
}
for(i=n-1;i>=0;i--)//从右边
{
for(j=i-1;j>=0;j--)
{
if(s[j]>s[i]&&b[j]<b[i]+1)
b[j]=b[i]+1;
}
}
for(i=0;i<n;i++)//找最大的
{
if (max<a[i]+b[i])
max=a[i]+b[i];
}
printf("%d\n",n-max+1);
system("pause");
return 0;
}