首页 > 其他 > 详细

CodeForces 448C Painting Fence

时间:2016-09-04 10:07:28      阅读:140      评论:0      收藏:0      [点我收藏+]

Portal:http://codeforces.com/problemset/problem/448/C

如果只考虑对全部n个木板竖刷,需要n次刷完,是ans理论上的最大值。

如果我们选择横刷,那么至少要刷掉最高度低的木板,否则得到的答案一定比全部竖刷大

所以对n个木板刷的最小次数就是n与刷掉最低版后两边分治递归+刷掉最低版次数的最小值

技术分享
 1     #include<iostream>
 2     #include<algorithm>
 3     #include<set>
 4     #include<cstdio>
 5     #include<cstdlib>
 6     #include<cmath>
 7     using namespace std;
 8     #define FOR(i,j,k) for(int i=j;i<=k;i++)
 9     #define FORD(i,j,k) for(int i=j;i>=k;i--)
10     #define LL long long
11     #define SZ(x) int(x.size())
12     #define maxn 5010
13     int n;
14     int a[maxn];
15     int fz(int l,int r,int v)
16     {
17         if(l<=r)
18         {
19         /*int ss=999999;
20         int s=0;
21         FOR(i,l,r)
22         if(a[i]<ss) {ss=a[i];s=i;}
23         return min(r-l+1,fz(l,s-1,ss)+fz(s+1,r,ss)+ss-v);*/
24         int m=min_element(a+l,a+r+1)-a;
25         return min(r-l+1,fz(l,m-1,a[m])+fz(m+1,r,a[m])+a[m]-v);
26         }
27         else return 0;
28     }
29     
30     int main()
31     {
32     cin>>n;
33     FOR(i,1,n)
34     cin>>a[i];
35     cout<<fz(1,n,0);
36     return 0;
37     }
38     
ac代码

 

CodeForces 448C Painting Fence

原文:http://www.cnblogs.com/mukoiaoi/p/5838699.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!