测试数据:5, 500,5,41,4,40
要点:1、只有当“当前拦截高度”(如41)均大于“拦截后相对较低高度”(如5)时,创建新一个拦截系统
2、当“当前拦截高度”(如4)小于“拦截后相对较低高度”(如5和41)时,选择相差较小的高度,并修改其值(此处为5)
代码如下:
#include<iostream>
using namespace std;void main()
{
int n,a[1000],b[1000];
while(cin>>n)
{ int x=0,min,y,xb;
for(int i=0;i<n;i++)cin>>a[i];
b[0]=a[0];
for(int j=0;j<n-1;j++)
{
min=30000; //设定min的初始值
//前〉后时
if(a[j]>=a[j+1])
{
for(int k=0;k<=x;k++) //找到与b[x]相差最小的b[x]的下标xb
{
y=b[k]-a[j+1];
if(y>=0&&min>=y)
{
min=y;
xb=k;
}
}
b[xb]=a[j+1];
}
//前〈后时
if(a[j]<a[j+1])
{ int js=0;
for(int k=0;k<=x;k++) //找到与b[x]相差最小的b[x]的下标xb
{
y=b[k]-a[j+1];
if(y>=0&&min>=y)
{
min=y;
xb=k;
js++;
}
}
if(js==0) //在b[x]中未找到大于a[j+1]的值,只能新建另一系统
{
x++;
b[x]=a[j+1];
}
else b[xb]=a[j+1];
}
}
cout<<x+1<<endl;
}
}