题目
给你n(n<=1e5)高度,第i个代表高度为hi(1<=hi<=1e9)的塔,如下图所示,
每过一秒,暴露在空气里的块就会消失,问多少秒后所有块都消失
只要有一个面和空气接触就消失,特别地,认为下底面和空气不接触
思路来源
https://blog.csdn.net/qq_37632935/article/details/78694985
题解
每个塔消失的时间不会超过它的高度,
每个塔消失的时间,最多为与它相邻的塔消失的时间+1
理解了这一点就可以dp了,
最后消失的塔最少也为与它相邻的塔消失的时间+1,
因此,答案=最后消失的塔的消失时间
心得
dp还是很不好理解,补上就好了叭
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int n,dp[maxn],ans;
int main()
{
scanf("%d",&n);
dp[0]=dp[n+1]=0;//便于让1和n只用一次就消失
//每个长条消失所用次数不会超过它的高度
for(int i=1;i<=n;++i)
scanf("%d",&dp[i]);
for(int i=1;i<=n;++i)
dp[i]=min(dp[i],dp[i-1]+1);
for(int i=n;i>=1;--i)
dp[i]=min(dp[i],dp[i+1]+1);
for(int i=1;i<=n;++i)
ans=max(ans,dp[i]);
printf("%d\n",ans);
return 0;
}