大概讲一下我的想法,题目是盖楼,我这是拆楼,每次拆一层 a[i]--;要次数最少,就要每次尽可能多栋一起减,所以遇到1的话,就递归调用上一段非1的子串。
但是最后一个点TLE了
#include<stdio.h>
#include<math.h>
#include<algorithm>
int n,a[100002];
long sum=0;
void digui(int f,int l)
{
int i,p,f1=f;
if(f<=l)
{
for(i=f;i<=l;i++)
{
if(a[i]==1)
{
digui(f1,i-1);
f1=i+1;
}
a[i]-=1;
}
digui(f1,l);
sum++;
}
else
return ;
}
int main()
{
int i;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
digui(1,n);
printf("%ld",sum);
}