cf 448 C. Painting Fence
Posted lishengkangshidatiancai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cf 448 C. Painting Fence相关的知识,希望对你有一定的参考价值。
分治,对于每个子区间都有两种情况,一种是全都竖着刷,第二种是把最小值以下横着刷,上面的部分被分成好多段,再一直递归下去
#include<bits/stdc++.h> using namespace std; int h[5010]; const int INF=1e9+7; int cal(int l,int r) { if(l>r) return 0; int minn=INF; for(int i=l;i<=r;i++) minn=min(h[i],minn); for(int i=1;i<=r;i++) h[i]-=minn; int now=minn; int s=l; for(int i=l;i<=r;i++) { if(i==r&&h[i]>0)//注意这里要加特判,最后一位必须大于0,否则可能一直递归下去 { now+=cal(s,i); } else if(h[i]==0) { now+=cal(s,i-1),s=i+1; } } return min(r-l+1,now); } int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&h[i]); printf("%d ",cal(1,n)); }
以上是关于cf 448 C. Painting Fence的主要内容,如果未能解决你的问题,请参考以下文章
[Codeforces 448C]Painting Fence
Codeforces 448C. Painting Fence
CodeForces 448C Painting Fence