Codeforces 448C Painting Fence:分治
题目链接:http://codeforces.com/problemset/problem/448/C
题意:
有n个木板竖着插成一排栅栏,第i块木板高度为a[i]。
你现在要将栅栏上所有地方刷上油漆。
每次你可以选择竖着刷或横着刷,但必须保证一次刷的地方不能间断。
问你至少要刷几次才能刷满。
题解:
首先有一个贪心结论:
对于当前要刷的一片区域,令minn为这片区域的最小高度。
如果选择横着刷,则至少要将区域底部的minn层刷完。
如图,至少要将下面两层刷完:
然后考虑如何分治:
对于当前的这一片区域,将最下面的minn层去掉之后,原区域就变成了若干个小区域。
这样就转化成了若干个子问题。
所以当前区域的最小次数 = min( 只竖着刷的次数, 先横着刷minn次 + ∑ 子区域的最小次数 )
即:dfs(x,y) = min(y-x+1, minn + ∑ dfs(Li,Ri))
边界条件:x == y时,最多只用竖着刷一次。
AC Code:
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 5005
#define INF 1000000000 using namespace std; int n;
int a[MAX_N]; int dfs(int x,int y)
{
if(x==y) return ;
int minn=INF;
for(int i=x;i<=y;i++) minn=min(minn,a[i]);
for(int i=x;i<=y;i++) a[i]-=minn;
int sum=;
int p=x;
for(int i=x;i<=y;i++)
{
if(a[i] && (i==y || !a[i+])) sum+=dfs(p,i);
if(!a[i] && i<y && a[i+]) p=i+;
}
return min(sum+minn,y-x+);
} int main()
{
cin>>n;
for(int i=;i<=n;i++) cin>>a[i];
cout<<dfs(,n)<<endl;
}
Codeforces 448C Painting Fence:分治的更多相关文章
- [Codeforces 448C]Painting Fence
Description Bizon the Champion isn't just attentive, he also is very hardworking. Bizon the Champion ...
- Codeforces 448C Painting Fence(分治法)
题目链接:http://codeforces.com/contest/448/problem/C 题目大意:n个1* a [ i ] 的木板,把他们立起来,变成每个木板宽为1长为 a [ i ] 的栅 ...
- codeforces 256 div2 C. Painting Fence 分治
C. Painting Fence time limit per test 1 second memory limit per test 512 megabytes input standard in ...
- CF-448C Painting Fence 分治
Painting fence 题意 乍一看以为是之前做过的一道单调队列优化的DP,不是. 也是有n块木板,每个木板宽1米,有一个高度ai,现在要把他们刷成橘色,给了你一个宽一米的刷子,你可以横着刷,或 ...
- painting fence - 分治 - Codeforces 448c
2017-08-02 14:27:18 writer:pprp 题意: • 每块木板宽度均为1,高度为h[i] • n块木板连接为宽度为n的栅栏 • 每次可以刷一横或一竖(上色) • 最少刷多少次可以 ...
- 448C - Painting Fence(分治)
题意:给出宽为1高为Ai的木板n条,排成一排,每次上色只能是连续的横或竖并且宽度为1,问最少刷多少次可以使这些木板都上上色 分析:刷的第一步要么是所有的都竖着涂完,要么是先横着把最矮的涂完,如果是第一 ...
- cf 448c Painting Fence
http://codeforces.com/problemset/problem/448/C 题目大意:给你一个栅栏,每次选一横排或竖排染色,求把全部染色的最少次数,一个点不能重复染色. 和这道题有点 ...
- C. Painting Fence 分治
memory limit per test 512 megabytes input standard input output standard output Bizon the Champion i ...
- codeforces C. Painting Fence
http://codeforces.com/contest/448/problem/C 题意:给你n宽度为1,高度为ai的木板,然后用刷子刷颜色,可以横着刷.刷着刷,问最少刷多少次可以全部刷上颜色. ...
随机推荐
- LinkedList add remove get 代码分析
add void linkLast(E e) { //e 要添加的元素 final Node<E> l = last; // 最后一个元素 final Node<E> newN ...
- 2018,从AI看安卓生态的变革
AI的发展与影响 与传统技术不同的是,AI技术算法清晰,优化目标明确,基础技术成熟,使得一众中小创企也看到了市场的机会.2017年中国企业动作频频,在自动驾驶,智能安防,智慧城市等领域都取得了不俗的成 ...
- Java集合系列之TreeMap源代码分析
一.概述 TreeMap是基于红黑树实现的.因为TreeMap实现了java.util.sortMap接口,集合中的映射关系是具有一定顺序的,该映射依据其键的自然顺序进行排序或者依据创建映射时提供的C ...
- find 多文件查找需要单引号
[root@db01 local]# find -name '*.com'|xargs egrep "qq"./tt.com:qq[root@db01 local]# find ...
- C++中多态性学习(上)
多态性学习(上) 什么是多态? 多态是指同样的消息被不同类型的对象接收时导致不同的行为.所谓消息是指对类的成员函数的调用,不同的行为是指不同的实现,也就是调用了不同的函数.虽然这看上去好像很高级的样子 ...
- Hp服务器 iLO3 使用方法
首先iLO3 和ipmi什么关系?如下是我摘自:hp官网 的一段话 With HP iLO3, you can: Experience a fast Remote Console incorpora ...
- 阿里巴巴产品实习生N天
时间貌似有些太遥远,已经没办法从刚来时的日子一天一天数.连上内网打开内外.看到45天,每一次不经意的邂逅总会让人认为奇妙而微妙,每一次的巧合总会让人认为是神在显灵(但愿天津安好,这里也曾在我心中滋润过 ...
- eclipse 给jar包关联javadoc
1.右键点击Referenced Libraries下的jar --> 选择 Build Path --> Configure Build Path. 2.选择jar的Javadoc lo ...
- Unity3D C#事件管理:EventManager
原文地址:http://bbs.9ria.com/thread-153258-1-1.html 原project地址:https://github.com/djandrew/UnityEventMan ...
- linux c编程:进程环境
一 进程终止: ⼀个进程可以登记若⼲个(具体⾃⼰验证⼀下)个函数,这些函数由exit⾃动调⽤,这些函数被称为终⽌处理函数, atexit函数可以登记这些函数. exit调⽤终⽌处理函数的顺序和atex ...