90分最后一个点1.2s,大佬请进
查看原帖
90分最后一个点1.2s,大佬请进
311830
Lhz1313楼主2020/7/16 12:45

大概讲一下我的想法,题目是盖楼,我这是拆楼,每次拆一层 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);
}
2020/7/16 12:45
加载中...