题目描述

贝西要用干草包堆出一座金字塔。干草包会从传送带上陆续运来,依次出现 N 包,每包干草可
以看做是一个二维平面上的一个长方形,第 i 包干草的宽度是 W i ,长度统一为 1。
金字塔的修建有几个规定,首先,为了建筑稳定,塔一定要形成类似“金”字的样子,即塔的上
层宽度不能超过下层宽度,而且每层的干草包必须紧靠在一起,不能出现缝隙。其次,由于干草是陆
续送来的,所以先送来的干草放在较低层。贝西会选择最先送来的几包干草,堆在地上作为第一层,
然后再把紧接着送来的几包干草包放在第二层,再铺建第三层……重复这个过程,一直到所有的干草
全部用完。最后,贝西不喜欢浪费,所有干草包一定要用上,不能弃置不用。贝西的目标是建一座最
高的金字塔,在遵循上述规定的前提下,她可以任意决定在金字塔的每一层布置多少连续的干草包。
请你来帮助她完成这个任务吧。

输入

• 第一行:单个整数 N,1 ≤ N ≤ 100000
• 第二行到第 N + 1 行:第 i + 1 行有一个整数 W i ,1 ≤ W i ≤ 10000

输出

• 单个整数:表示可以建成的最高高度

样例输入

3 1 2 3

样例输出

2

提示

将 1 和 2 放在第一层,将 3 放在第二层

题解:

我们从上往下搭 方便转移

设F[i]为后i个最多搭多少层,p[i]为最下面一层为多少

很容易得出 如果满足sum[i]-sum[j]>=p[j] 就可以转移F[i]=F[j]+1

移项sum[i]>=sum[j]+p[j] 所以我们要选出满足条件的最大sum[j]+p[j] 这样转移来的答案一定是最优的

于是开单调队列维护sum[j]+p[j]

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
int gi(){
int str=;char ch=getchar();
while(ch>'' || ch<'')ch=getchar();
while(ch>='' && ch<='')str=str*+ch-,ch=getchar();
return str;
}
int a[N],sum[N],f[N],p[N],q[N];
int main()
{
int n=gi();
for(int i=;i<=n;i++)a[i]=gi();
for(int i=n;i>=;i--)sum[i]=sum[i+]+a[i];
int ans=,l=,r=;
for(int i=n;i>=;i--)
{
while(l<r && sum[i]>=sum[q[l+]]+p[q[l+]])l++;
f[i]=f[q[l]]+;
p[i]=sum[i]-sum[q[l]];
if(f[i]>ans)ans=f[i];
while(l<=r && sum[i]+p[i]<=sum[q[r]]+p[q[r]])r--;
q[++r]=i;
}
printf("%d",ans);
return ;
}

【USACO】干草金字塔的更多相关文章

  1. USACO 重排干草&&BZOJ1045

    USACO 重排干草&&BZOJ1045 Description 约翰订购了很多干草,他在农场里标记了 N 个位置.这些位置近似地构成一个圆环.他原打算 让送货司机在 i 号位卸下 B ...

  2. USACO 2009 Open 干草塔 Tower of Hay

    USACO 2009 Open 干草塔 Tower of Hay Description 为了调整电灯亮度,贝西要用干草包堆出一座塔,然后爬到牛棚顶去把灯泡换掉.干草 包会从传送带上运来,共会出现N包 ...

  3. 【USACO 1.5.1】数字金字塔

    [题目描述] 观察下面的数字金字塔. 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大.每一步可以走到左下方的点也可以到达右下方的点. 7 3 8 8 1 0 2 7 4 4 4 ...

  4. 数字金字塔 动态规划(优化版) USACO 一维dp压缩版

    1016: 1.5.1 Number Triangles 数字金字塔 时间限制: 1 Sec  内存限制: 128 MB提交: 9  解决: 8[提交] [状态] [讨论版] [命题人:外部导入] 题 ...

  5. USACO 2009 Open 干草塔 Tower of Hay(贪心+单调队列优化DP)

    https://ac.nowcoder.com/acm/contest/1072/B Description 为了调整电灯亮度,贝西要用干草包堆出一座塔,然后爬到牛棚顶去把灯泡换掉.干草包会从传送带上 ...

  6. BZOJ 1606 USACO 2008 Dec. 购买干草

    [题意概述] 有n件物品,每件物品有体积Vi,背包容量为C,问最多可以装多少体积的物品 [题解] 显然是个无限背包嘛.. 直接做背包DP就好 注意无限背包的写法和01背包的区别 #include< ...

  7. USACO翻译:USACO 2012 JAN三题(2)

    USACO 2012 JAN(题目二) 一.题目概览 中文题目名称 叠干草 分干草 奶牛联盟 英文题目名称 stacking baleshare cowrun 可执行文件名 stacking bale ...

  8. usaco silver

    大神们都在刷usaco,我也来水一水 1606: [Usaco2008 Dec]Hay For Sale 购买干草   裸背包 1607: [Usaco2008 Dec]Patting Heads 轻 ...

  9. bzoj usaco 金组水题题解(1)

    UPD:我真不是想骗访问量TAT..一开始没注意总长度写着写着网页崩了王仓(其实中午的时候就时常开始卡了= =)....损失了2h(幸好长一点的都单独开了一篇)....吓得赶紧分成两坨....TAT. ...

随机推荐

  1. Flask 学习 十 博客文章

    提交和显示博客文章 app/models.py 文章模型 class Post(db.Model): __tablename__ = 'posts' id = db.Column(db.Integer ...

  2. java 二维码解析和生成

    package ykxw.web.qrcode.utils; import java.awt.Color; import java.awt.Graphics2D; import java.awt.im ...

  3. java利用iTextWorker生成pdf

    使用itext生成pdf,在linux环境下,中文全部失踪,因为itext要在linux下支持中文字体需要引入itext-asian, 并添加一个字体类. public static class Pd ...

  4. Linux 磁盘和文件管理系统 文件打包解压备份 VIM、VI编辑器

  5. MSSQL 2000 错误823恢复案例

    一.故障描述 MSSQL Server 2000 附加数据库错误823,附加数据库失败.数据库没有备份,不能通过备份恢复数据库,急需恢复数据库中的数据. 二.故障分析SQL Server数据库 823 ...

  6. recompose mapProps

    mapProps介绍 mapProps函数接收一个函数参数,这个函数参数会返回一个对象用作为接下来的组件的props.组件接收到的props只能是通过mapProps函数参数返回的对象,其他的prop ...

  7. 微信公众号Markdown编辑器, 适合代码排版

    随着大家都转战微信公众平台,如何快速的编写文章就摆在了首要位置.不可否认,使用微信自带的编辑器可以做出好看的排版,甚至用第三方编辑器有更多的模板.但是,这些全部都需要手动的调整.本来公众平台就算是自媒 ...

  8. WebDriverException : Missing 'type' parameter

    下载最新的geckodriver即可 v0.17.0 Releases · mozilla/geckodriver · GitHubhttps://github.com/mozilla/geckodr ...

  9. 裸辞两个月,海投一个月,从Android转战Web前端的求职之路

    前言 看到这个标题的童鞋,可能会产生两种想法: 想法一:这篇文章是标题党 想法二:Android开发越来越不景气了吗?前端越来越火了吗? 我一向不喜欢标题党,标题中的内容是我的亲身经历.我是2016年 ...

  10. 【漏洞复现】PHPCMS wap模块 SQL注入(附EXP)

    漏洞影响版本:v9.5.8.v9.6.0 Step1: 访问:http://www.xxx.com/index.php?m=wap&a=index&siteid=1, 获取返回的coo ...