pku 1836 Alignment

因为是权初始化mark1[],mark2[]为0,所以最后要再减去2,mark1[i]为从第1个到第i个人中最长递增子序列的最长长度,mark2[i]为从第个i到最后一个人中最长递减子序列的最长长度,求峰值

code:

//204k, 32ms

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
double list[1005];
int n, mark1[1005], mark2[1005];

int main()
{
while(scanf("%d", &n)!=EOF)
{
memset(mark1, 0, sizeof(mark1));
memset(mark2, 0, sizeof(mark2));
for(int i=0; i<n; i++)
scanf("%lf", &list[i]);
for(int i=1; i<n; i++)
{
for(int j=i-1; j>=0; j--)
{
if(list[i]>list[j])
if(mark1[i]<mark1[j]+1)
mark1[i]=mark1[j]+1;
}
}
for(int i=n-2; i>=0; i--)
{
for(int j=i+1; j<n; j++)
{
if(list[i]>list[j])
if(mark2[i]<mark2[j]+1)
mark2[i]=mark2[j]+1;
}
}
int flag=0;
for (int i = 0; i < n; i++)
for (int j = i + 1; j < n; j++)
flag=max(flag,(mark1[i]+mark2[j]));
printf("%d\n", n-flag-2);
}
return 0;
}
原文地址:https://www.cnblogs.com/FreeAquar/p/1943630.html