栅栏涂漆测评
题目描述

zed 最近总是受到 Farmer 的困扰,因此他在自家的门前插了一排栅栏以防农气的入侵。栅栏由 N 个竖条栅栏横向组成,每个竖条栅栏宽度为 1。过了一段时间,zed 觉得栅栏非常不美观。因此,他想给栅栏涂上颜色。问题是,zed的刷子宽度只有 1,也就是说,一次只能将连续的一排或一列格子涂上颜色(长度任意)。zed 想用最少的次数把栅栏全部涂上颜色(注意,一个格子不能重复涂色)。但是 zed 现在要去刷 DP 神题,没时间,所以这个问题就交给你了。

输入

第一行为一个整数 N,代表栅栏的宽度。
第二行为 N 个整数 h 1 ~ h n ,代表从左向右每个竖条栅栏的高度。

输出

输出文件有且仅有一行,一个整数 ans,代表将整个栅栏涂色所用最少次数。

样例输入输出

color.in

5
2 1 2 2 1

color.out

3

color.in

2

2 2

color.out

2

数据约定

1~3               N≤10,1≤h i ≤10 9

4~10             N≤5000,1≤h i ≤3*10 9(不得不说出题人很坑,写的10 9,结果date里面出现了2*10 9多的数......)

反思

其实这题吧,我的想法是特别暴力的,而且我并不知道我的想法是否正确,我们用单调栈来储存,找到一定高度所能达到的最大横最大面积,然后比较,我们是选择横着刷或竖着刷,虽然我的程序有问题,但是还有40pts我也很蒙啊......而且我的代码为什么永远那么长,自己一定要多练一练啊!!!!!

题解

恩......

这题是个分治题

具体思路的话就是下面的了:

我们对这些栅栏,考虑使用横着刷还是竖着刷,首先我们在大区间里面考虑,然后随着横着刷,我们的大区间就会被分割成一个一个的小区间,同样的,我们对小区间也采取这种方式,最后在竖的和横的里面取一个min,最后求出答案就可以啦,注意点是我们递归传递的区间是很有考量的,虽然我到现在也不知道为什么,所以如果有人来看我博客,并且有人知道的话,教一教我啦,O(∩_∩)O谢谢

 #include<bits/stdc++.h>
#define FOR(i,a,b) for(register int i=a;i<=b;i++)
#define ROF(i,a,b) for(register int i=a;i>=b;i--)
#define ll long long
using namespace std;
ll n;
ll a[];
const ll N=0x7fffffffff;
ll solve(ll l,ll r,ll h)
{
if(l==r) return ;
ll minh=N;ll ans=;
FOR(i,l,r) if(a[i]<minh) minh=a[i];//由于是递归下来的,所以我们不用
//担心h会比minh小.....
ans+=minh-h;
// cout<<"ans="<<ans<<endl;
FOR(i,l,r)
{
if(a[i]==minh) continue;
FOR(j,i,r)
{
if(a[j+]==minh||j==r)
{
ans+=solve(i,j,minh);
i=j+;
break;
}
}
}
return min(ans,r-l+);
}
ll scan()
{
ll as=;
char c=getchar();
while(c<''||c>'') c=getchar();
while(c>=''&&c<='')
{
as=(as<<)+(as<<)+c-'';
c=getchar();
}
return as;
}
int main()
{
n=scan();int num=;
// cout<<"YY"<<endl;
FOR(i,,n)
a[i]=scan(); cout<<solve(,n,);
return ;
}
/*
抠几个细节
首先为了避免找到相同的,我们要从断点的下一个开始寻找,这是一点,然后我们就把这个放到下一个里面去循环

代码在这里

栅栏涂漆(color)的更多相关文章

  1. codeforces 349B Color the Fence 贪心,思维

    1.codeforces 349B    Color the Fence 2.链接:http://codeforces.com/problemset/problem/349/B 3.总结: 刷栅栏.1 ...

  2. [Swift]LeetCode276. 粉刷栅栏 $ Paint Fence

    There is a fence with n posts, each post can be painted with one of the k colors. You have to paint ...

  3. 转 多线程 闭锁(Latch) 栅栏(CyclicBarrier)

    java多线程并发系列之闭锁(Latch)和栅栏(CyclicBarrier) 标签: java并发编程 2015-05-28 16:45 2939人阅读 评论(0) 收藏 举报 本文章已收录于: . ...

  4. 20181225模拟赛 T1 color (转化思想,分拆思想)

    题目: 有⼀块有 n 段的栅栏,要求第 i 段栅栏最终被刷成颜色 ci .每⼀次可以选择 l, r 把第l . . . r 都刷成某种颜色,后刷的颜⾊会覆盖之前的.⼀共有 m 种颜色,雇主知道只需要用 ...

  5. bzoj 1600 &amp; Usaco 月赛 2008 建造栅栏 题解

    [原题] 1600: [Usaco2008 Oct]建造栅栏 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 785  Solved: 443 [Subm ...

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

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

  7. 【转】c#、wpf 字符串,color,brush之间的转换

    转自:http://www.cnblogs.com/wj-love/archive/2012/09/14/2685281.html 1,将#3C3C3C 赋给background this.selec ...

  8. Python为8bit深度图像应用color map

    图片中存在着色版的概念,二维矩阵的每个元素的值指定了一种颜色,因此可以显示出彩色. 迁移调色板 下述python代码将VOC数据集中的某个语义分割的图片的调色板直接应用在一个二维矩阵代表的图像上 #l ...

  9. (转)System.Drawing.Color的颜色对照表

    经常使用System.Drawing.Color, 本篇介绍一下颜色与名称及RGB值的对应关系. 1. 颜色与名称的对照表(点击下图放大看): 2. 颜色与RGB值对照表: Color.AliceBl ...

随机推荐

  1. Hive学习路线图

  2. 交叉编译qt5.6

    按照网上的攻略编译QT5.6 https://www.lijingquan.net/2016/07/08/build-kernel-busybox-qt5-6-tslib-imx28/ 出现问题,找不 ...

  3. iOS-delegate设计模式

    1. 使用场合 1> A想让B帮忙做一些事情,就让B成为A的代理 2> A想通知一下B发生了某些事情,或者想传递一些数据给B,就让B成为A的代理 3> B想监听A所做的一些事情, 就 ...

  4. pdfmake实现中文支持,解决中文乱码问题

    引言:当初自己为了在项目中bootstrap-table中实现导出pdf,使用的pdfmake,但是pdfmake默认使用的不是中文字体,实现pdfmake使用中文字体主要就是编译新的vfs_font ...

  5. python consumer producer

    from threading import Thread, Lock import time import random queue = [] lock = Lock() class Producer ...

  6. 《数据结构与算法分析:C语言描述》复习——第六章“排序”——冒泡排序

    2014.06.17 01:04 简介: 冒泡排序是O(n^2)级别的交换排序算法,原理简单,属于必知必会的基础算法之一. 思路: 排序要进行N轮,每一轮从尾部逐个向前扫描,遇到逆序对就进行交换.确保 ...

  7. 剑指Offer - 九度1516 - 调整数组顺序使奇数位于偶数前面

    剑指Offer - 九度1516 - 调整数组顺序使奇数位于偶数前面2013-11-30 02:17 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部 ...

  8. 《Cracking the Coding Interview》——第4章:树和图——题目8

    2014-03-19 05:04 题目:给定两棵二叉树T1和T2,判断T2是否是T1的子树.子树的定义是,以T1的某个节点(可以是T1的根)作为根节点,得到的这棵树和T2一模一样. 解法:首先可以根据 ...

  9. IE开发人员工具教程

    写在前面 一直非常谷歌的控制台,因为我是做前端的,谷歌浏览器在我看来是解析JS最快的浏览器,所谓的熟能生巧,用熟悉了谷歌浏览器之后就特别喜欢用谷歌的控制台调试脚本.改变样式.查看HTML.查看资源加载 ...

  10. Canvas 剪切图片

    /** * 剪切图像 */ function initDemo8(){ var canvas = document.getElementById("demo8"); if (!ca ...