疑惑,,,为什么错误的代码可以a,自认为正确的wa了好多组。。

为何这样不对呢??实在疑惑。。
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
#define MAXN 110

int dp[MAXN], h[MAXN];
int lmax, rmax;

int LIS(int l, int r, int flag)
{
int len = 1;
if(flag > 0)
{
dp[1] = l;
for(int i = l + 1; i <= r; i++)
{
if(h[i] < h[dp[1]])
dp[1] = i;
else if(h[i] > h[dp[len]])
dp[++len] = i;
else
{
for(int j = len; j >= 1; j--)
if(h[i] < h[dp[j]])
dp[j - 1] = i;
}
}
lmax = dp[len];
}
else
{
dp[1] = r;
for(int i = r - 1; i >= l; i--)
{
if(h[i] < h[dp[1]])
dp[1] = i;
else if(h[i] > h[dp[len]])
dp[++len] = i;
else
{
for(int j = len; j >= 1; j--)
if(h[i] < h[dp[j]])
dp[j - 1] = i;
}
}
rmax = dp[len];
}
return len;
}

bool check(int l, int r)
{
for(int i = l; i <= r; i++)
if(h[i] > h[l])
return false;
return true;
}

int main()
{
// freopen("1098.in", "r", stdin);

int n;
scanf("%d", &n);
for(int i = 0; i < n; i++)
scanf("%d", h + i);
int ans = n - 1;
for(int i = 1; i < n - 2; i++)
{
int tmp = LIS(0, i, 1) + LIS(i + 1, n - 1, -1);
if(h[lmax] == h[rmax] && check(lmax, rmax))
tmp--;
ans = min(ans, n - tmp);
}
printf("%d\n", ans);
return 0;
}

0 条评论

目前还没有评论...

信息

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