bzoj1233[USACO2009 Open]Tower of Hay干草金字塔
来源:互联网 发布:斗牛怎么快速算点数js 编辑:程序博客网 时间:2024/04/28 16:19
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1233权限题
题目大意:
题解:
单调队列优化
首先要证一个东西,就是底层最瘦的金字塔一定能搭成最高的。
[然而我并不怎么会,所以引用一下马融大大的证明:]
设f[i]为做到i的时候最后一层的最小宽度为多少。g[i]记录搭到i时的最高层数
(sum[i]为前缀和
我是从后开始做的,为了方便打,就在输入的时候直接倒过来了。
于是相当于我是从顶层开始搭起,那么方程就是:
f[i]=sum[i]-sum[j];j满足f[j]<=sum[i]-sum[j] (j<i)
即 j要满足sum[i]>=sum[j]+f[j]。故对于i来说,若有k<j,且sum[j]+f[j]<sum[k]+f[k]的话,j比k要优,k是可以被舍弃的。所以要维护一个sum[i]+f[i]单调递增的单调队列。
#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<iostream>using namespace std;#define maxn 101000int w[maxn],f[maxn];int g[maxn],q[maxn],sum[maxn];int main(){//freopen("pyramid.in","r",stdin);//freopen("pyramid.out","w",stdout);int n,i,l,r;scanf("%d",&n);sum[0]=0;for (i=n;i>=1;i--) scanf("%d",&w[i]);for (i=1;i<=n;i++) sum[i]=sum[i-1]+w[i];g[0]=0;l=1;r=1;q[1]=0;for (i=1;i<=n;i++){while (l<r && sum[i]>=sum[q[l+1]]+f[q[l+1]]) l++;int j=q[l];f[i]=sum[i]-sum[j];g[i]=g[j]+1;while (l<r && sum[q[r]]+f[q[r]]>=sum[i]+f[i]) r--;q[++r]=i;}printf("%d\n",g[n]);return 0;}这题,真的,让我真正开始理解了单调队列!
0 0
- bzoj1233[USACO2009 Open]Tower of Hay干草金字塔
- BZOJ1233【usaco open 2009】干草堆 tower
- [BZOJ1233] [Usaco2009Open]干草堆tower
- BZOJ1233: [Usaco2009Open]干草堆tower
- bzoj1233[Usaco2009Open]干草堆tower
- BZOJ_P1682 [Usaco2005 Mar]Out of Hay 干草危机(最小生成树)
- bzoj 1682: [Usaco2005 Mar]Out of Hay 干草危机(最小生成树)
- bzoj1682 [Usaco2005 Mar]Out of Hay 干草危机(kruskal裸题)
- [Usaco2008 Dec]Hay For Sale 购买干草
- bzoj1618[Usaco2008 Nov]Buying Hay 购买干草
- [BZOJ1618] [Usaco2008 Nov]Buying Hay 购买干草
- bzoj1618【Usaco2008 Nov】Buying Hay 购买干草
- 【bzoj1618】【Usaco2008 Nov]】Buying Hay 购买干草
- 1618: [Usaco2008 Nov]Buying Hay 购买干草
- P2925 [USACO08DEC]干草出售Hay For Sale
- [Usaco2008 Dec]Hay For Sale 购买干草
- 洛谷P2918 [USACO08NOV]买干草Buying Hay
- [BZOJ1233][Usaco2009Open]干草堆tower(dp+决策单调性)
- QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数
- Python_多元回归(一元回归)
- 关于Cookie的原理、作用,区别以及使用
- Centos6.8安装配置VNC
- spring框架的搭建小demo
- bzoj1233[USACO2009 Open]Tower of Hay干草金字塔
- 由session cookie引起的openstack dashboard登录问题一例
- Django 数据库表单查询
- 信使
- 单片机:STC89C52的最小单元
- Centos7.2安装mysql5.7.13 报错 Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
- HDU:1232畅通工程
- Servlet-中文乱码问题
- Python_多项式拟合