求解为何第三点错了= =

#include<iostream>
#include<string.h>
using namespace std;
int n,i,j,ans;
int a[1000];
int max(int s1,int s2)
{
    if (s1>=s2) return s1;
    else return s2;
}
int findright(int key)
{
    int f[1000];
    int temp=0;
    memset(f,0,sizeof(f));
    f[key]=1;
    for (int i=key+1;i<=n;i++)
    {
     for (int j=key;j<=i-1;j++)
      if (a[i]<a[j]) f[i]=max(f[i],f[j]+1);
     temp=max(temp,f[i]); 
     }
    return temp;
}
int findleft(int key)
{
    int f[1000];
    int temp=0;
    memset(f,0,sizeof(f));
    f[key]=1;
    for (int i=key-1;i>=1;i--)
    {
     for (int j=key;j>=i+1;j--)
      if (a[i]<a[j]) f[i]=max(f[i],f[j]+1);
      temp=max(temp,f[i]);
    }
    return temp;
}
int main()
{
    cin>>n;
    for (i=1;i<=n;i++) cin>>a[i];
    ans=0;
    for (i=1;i<=n;i++)
    {
        ans=max(ans,findleft(i)+findright(i)-1);
    }
    cout<<n-ans;
} 

0 条评论

目前还没有评论...

信息

ID
1098
难度
5
分类
动态规划 | LIS 点击显示
标签
递交数
12832
已通过
4890
通过率
38%
被复制
21
上传者