C. Painting Fence 分治

摘要:
使用namespacestd;r) 返回0;a[p])+a[p]-bas)<}intmain(){LLn;对于(LLi=0;i<n;
memory limit per test
512 megabytes
input
standard input
output
standard output

Bizon the Champion isn't just attentive, he also is very hardworking.

Bizon the Champion decided to paint his old fence his favorite color, orange. The fence is represented as n vertical planks, put in a row. Adjacent planks have no gap between them. The planks are numbered from the left to the right starting from one, the i-th plank has the width of 1 meter and the height of ai meters.

Bizon the Champion bought a brush in the shop, the brush's width is 1 meter. He can make vertical and horizontal strokes with the brush. During a stroke the brush's full surface must touch the fence at all the time (see the samples for the better understanding). What minimum number of strokes should Bizon the Champion do to fully paint the fence? Note that you are allowed to paint the same area of the fence multiple times.

Input

The first line contains integer n (1 ≤ n ≤ 5000) — the number of fence planks. The second line contains nspace-separated integers a1, a2, ..., an (1 ≤ ai ≤ 109).

Output

Print a single integer — the minimum number of strokes needed to paint the whole fence.

Examples
input
5
2 2 1 2 1
output
3
input
2
2 2
output
2
input
1
5
output
1
Note

In the first sample you need to paint the fence in three strokes with the the first stroke goes on height 1 horizontally along all the planks. The second stroke goes on height 2 horizontally and paints the first and second planks and the third stroke (it can be horizontal and vertical) finishes painting the fourth plank.

In the second sample you can paint the fence with two strokes, either two horizontal or two vertical strokes.

In the third sample there is only one plank that can be painted using a single vertical stroke.

#include<cstdio>
#include<algorithm>
#include<vector>
#include<iostream>
#define MAXN 5009
typedef long long LL;

using namespace std;
LL a[MAXN];
LL ans;
LL solve(LL l, LL r, LL bas)
{
    if (l > r)
        return 0;
    int p = min_element(a + l, a +  r + 1) - a;
    //cout << min(r - l + 1, solve(l, p - 1, a[p]) + solve(p + 1, r, a[p]) + a[p] - bas) << endl;
    return min(r - l + 1, solve(l, p - 1, a[p]) + solve(p + 1, r, a[p]) + a[p] - bas);
}
int main()
{
    LL n;
    while (scanf("%lld", &n) != EOF)
    {
        LL sum = 0;
        for (LL i = 0; i < n; i++)
            scanf("%lld", &a[i]),sum+=a[i];
        printf("%lld
",sum/n);
    }
}

免责声明:文章转载自《C. Painting Fence 分治》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Tornado web 框架odoo中def init(self):下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【转】python调用youtube-dl实现视频下载

youtube-dl是一个命令行程序,用于从YouTube.com和更多网站下载视频。它需要Python解释器,版本2.6,2.7或3.2+,并且支持Unix,Windows或Mac OS X中运行。而且它提供了自定义添加视频解释并发布到github上,这意味着可以对其进行修改,重新分发。ubuntu系统安装youtube-dlsudo pip instal...

Python的map、filter、reduce函数

map函数func作用于给定序列的每个元素,并用一个列表来提供返回值。map函数python实现代码: def map(func,seq):     mapped_seq = []     for eachItem in seq:         mapped_seq.append(func(eachItem))     return mapped_seq...

VBA Excel 打印

1. 设置 页边距、打印区域 With .PageSetup  .HeaderMargin = Application.CentimetersToPoints(0.5)  .LeftMargin = Application.CentimetersToPoints(1.5)  .RightMargin = Application.CentimetersToP...

python学习第6天----文件操作

1.文件操作          python中通过open()函数打开一个文件,获取到文件句柄,然后通过文件句柄就可进行各种操作(句柄就相当于一个变量),文件句柄是一个可迭代对象          打开文件的操作有:r,w,a,r+,w+,a+,rb,wb,ab,r+b,w+b,a+b;默认使用的是r 1)只读操作 英雄.txt 惩戒之箭 九尾妖狐 远古...

Oracle EBS OM 创建订单

DECLARE l_header_rec OE_ORDER_PUB.Header_Rec_Type; l_line_tbl OE_ORDER_PUB.Line_Tbl_Type; l_action_request_tbl OE_ORDER_PUB.Request_Tbl_Type; l_header_adj_tbl OE_ORDER_PUB.Hea...

Python笔记---错误笔记

Python---错误笔记 1. Python编码问题: 我们在编写 Python 脚本时,往往会写上中文凝视。可是有时候,当我们执行程序时。却发现例如以下错误:SyntaxError: Non-ASCII character 'xe5' in file /home/johnnie/Files/Workspace/python/head_first/ch...