Description
码头上有-批货物,它们被摆放成了n摞,每摞的个数(高度)为di,并排成一排。
现在包工头酋长想用一台特殊的搬运机, 用最少的次数,将这批货物全部取走。
这台搬运机的工作原理是: - -次可以取走相邻几排最下面一层的所有货物。
例如:当货物共有4摞,每摞高度分别为231 2时,我们可以采用如下策略使得总使用次数最少
第一步:由于四摞货物是相邻的,取走这四摞货物最下面的一排货物,当前变为1 201
第二步:此时第三摞货物取空,第一、二摞和第四摞不相邻,取走前两摞货最下面一排,当前变为0101第三步、第四步:分别取走第二摞和第四摞货物最下面一排,从而将这批货物全部取走
因此使用这台搬运机的最少次数为: 4
Input
输入数据包含两行
第一行包括一个整数n,含义如题面所述(1 <= n <= 100000)
第二行包括n个整数di,表示每摞货物的高度(个数) (0 <= di <= 10000)
Output
输出包含一个 整数,表示使用搬运机的最少次数
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
bool empty(int *a,int n)
{
int cnt=0;
for(int i=0;i<n;i++)
{
if(a[i]==0)
cnt++;
}
if(cnt==n)
return true;
else
return false;
}
int main()
{
int n=0,flag=1,cnt=0,i=0;
if( scanf("%d",&n)!=1 )
exit(1);
getchar();
n++;
int a[n];
a[n-1]=0;
for(i=0;i<n-1;i++)
{
if( scanf("%d",&a[i])!= 1 )
{
printf("scan a[%d] error",i);
return 0;
}
}
while(1)
{
if(empty(a,n))
break;
for(i=0;i<n;i++)
{
if(a[i]>0)
{
a[i]--;
flag=1;
}
else
{
if(flag)
{
cnt++;
flag=0;
break;
}
flag=0;
}
}
}
printf("last cnt == %d",cnt);
return 0;
}