标签:复杂度 turn wmi \n 时间 lin 单位 ++ 表示
int n,h[5005];
int work(int l,int r,int now){
if(l==r)return 1;//边界情况
int i,j,ans=0,minh=1e9;
for(i=l;i<=r;i++)
if(h[i]<minh)minh=h[i];
//找到[l,r]这一串木板中最短的木板
ans+=minh-now;//记得减去之前已经涂了的now格
for(i=l;i<=r;i++){//分割成子局面并处理
if(h[i]==minh)continue;
for(j=i;j<=r;j++)
if(h[j+1]==minh||j==r)break;
ans+=work(i,j,minh);
i=j+1;//刚开始忘记了这里
}
return min(r-l+1,ans);//与竖着涂取min
}
int main(){
n=read();
for(int i=1;i<=n;i++)h[i]=read();
printf("%d\n",work(1,n,0));
return 0;
}
标签:复杂度 turn wmi \n 时间 lin 单位 ++ 表示
原文地址:https://www.cnblogs.com/PPXppx/p/10359976.html