2017-08-02 14:27:18

writer:pprp

题意:

  • 每块木板宽度均为1,高度为h[i]
  • n块木板连接为宽度为n的栅栏
  • 每次可以刷一横或一竖(上色)
  • 最少刷多少次可以使得栅栏被全部上色
  • 1 ≤ n ≤ 5000

算法分析:可以横着刷,可以竖着刷,横着刷是为了减小竖着刷的次数

    采用分治,每个分治中都取横着刷和竖着刷两者的最小值


代码及说明如下:

#include <iostream>
#include <queue> using namespace std;
const int INF = 0x3f3f3f3f;
const int maxn = ;
int n;
int a[maxn]; //在递归算法中不要用n,应该考虑的是在每个部分,而不能只是在第一个递归中的角标
int dfs(int l,int r)
{
int MIN = INF;
int cnt = ; //找到所有木板中最短的那个
for(int i = l ; i <= r; i++)
{
MIN = min(MIN, a[i]);
} //将数目加上最短板长度
cnt += MIN; //所有的木板减去这个长度
for(int i = l; i <= r; i++)
{
a[i] -= MIN;
} int left = l; // 分段递归解决问题
for(int i = l; i <= r; i++)
{
if(a[i] == )
{
cnt +=dfs(left,i-);
left = i+ ;
}
} //最后一段,需要一个判断
if(left <= r)
cnt += dfs(left,r); return min(cnt,r-l+);
} int main()
{
cin >> n; for(int i = ; i <= n ; i++)
{
cin >> a[i];
} cout << dfs(,n) << endl; return ;
}

painting fence - 分治 - Codeforces 448c的更多相关文章

  1. codeforces 256 div2 C. Painting Fence 分治

    C. Painting Fence time limit per test 1 second memory limit per test 512 megabytes input standard in ...

  2. CF-448C Painting Fence 分治

    Painting fence 题意 乍一看以为是之前做过的一道单调队列优化的DP,不是. 也是有n块木板,每个木板宽1米,有一个高度ai,现在要把他们刷成橘色,给了你一个宽一米的刷子,你可以横着刷,或 ...

  3. C. Painting Fence 分治

    memory limit per test 512 megabytes input standard input output standard output Bizon the Champion i ...

  4. 【题解】Painting Fence

    [题解]Painting Fence 分治模板.贪心加分治.直接\(O(n^2logn)\)分治过去.考虑一块联通的柱形是子问题的,是递归的,贪心分治就可.记得对\(r-l+1\)取\(min\). ...

  5. Codeforces Round #256 (Div. 2) C. Painting Fence(分治贪心)

    题目链接:http://codeforces.com/problemset/problem/448/C C. Painting Fence time limit per test 1 second m ...

  6. Codeforces 448C:Painting Fence 刷栅栏 超级好玩的一道题目

    C. Painting Fence time limit per test 1 second memory limit per test 512 megabytes input standard in ...

  7. CF448C Painting Fence (分治递归)

    Codeforces Round #256 (Div. 2) C C. Painting Fence time limit per test 1 second memory limit per tes ...

  8. Codeforces 448 C. Painting Fence

    递归.分治. . . C. Painting Fence time limit per test 1 second memory limit per test 512 megabytes input ...

  9. Codeforces Round #256 (Div. 2/C)/Codeforces448C_Painting Fence(分治)

    解题报告 给篱笆上色,要求步骤最少,篱笆怎么上色应该懂吧,.,刷子能够在横着和竖着刷,不能跳着刷,,, 假设是竖着刷,应当是篱笆的条数,横着刷的话.就是刷完最短木板的长度,再接着考虑没有刷的木板,,. ...

随机推荐

  1. Codeforces Round #365 (Div. 2) D.Mishka and Interesting sum

    题目链接:传送门 题目大意:给n个数,m次询问,每次询问区间 l,r 内出现偶数次数的异或和 题目思路:前缀和+离线处理+树状数组 首先可以知道, l,r 内出现奇数次的数的和,就是把 l,r内所有数 ...

  2. 170120、java 如何在pdf中生成表格

    1.目标 在pdf中生成一个可变表头的表格,并向其中填充数据.通过泛型动态的生成表头,通过反射动态获取实体类(我这里是User)的get方法动态获得数据,从而达到动态生成表格. 每天生成一个文件夹存储 ...

  3. PHP使用SimpleElement创建和解析xml文件

    <!-- 使用SimpleXMLElement生成xml文件 --><?php//生成一个xml文件 //xml字符串$_xml = <<<_xml<?xml ...

  4. Oracle中sql相关的命令

    1.创建用户 SQL> -- 例如创建一个用户名为xiaoming,密码为a123的用户 SQL> create user xiaomingidentified by a123; 用户已创 ...

  5. tableView的使用(一)

    //tableView的创建    //1.初始化 initWithFrame:style:(plian,gronp)    //2.设置属性(行高, 分割线, 表头, 表尾)    //3.添加到父 ...

  6. 基于UDP的套接字、粘包问题

    一.基于UDP的套接字 UDP服务端 ss = socket() #创建一个服务器的套接字 ss.bind() #绑定服务器套接字 inf_loop: #服务器无限循环 cs = ss.recvfro ...

  7. Python高级教程-高阶函数

    Higher-order function(高阶函数) 变量可以指向函数 以Python内置的求绝对值的函数abs()为例,调用该函数用以下代码: >>> abs(-10) 10 但 ...

  8. java架构师之路:推荐的15本书

    作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水 ...

  9. Xamrin开发安卓笔记(三)

    http://www.cnblogs.com/minCS/p/4118170.html Xamrin开发安卓笔记(三)   安装片 Xamrin开发安卓笔记(一) Xamrin开发安卓笔记(二) 这次 ...

  10. LeetCode:N叉树的前序遍历【589】

    LeetCode:N叉树的前序遍历[589] 题目描述 给定一个 N 叉树,返回其节点值的前序遍历. 例如,给定一个 3叉树 : 返回其前序遍历: [1,3,5,6,2,4]. 题目分析 使用栈结构. ...