首页 > 代码库 > CodeForces 448C Painting Fence
CodeForces 448C Painting Fence
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 long11 #define SZ(x) int(x.size())12 #define maxn 501013 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
CodeForces 448C Painting Fence
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。