枚举最终的W堆积木在哪,确定了区间,那么就需要把高于H的拿走,低于H的补上,高处的积木放到矮的上面,这样最优。

注意多出来的积木可以放在已有积木的前面或者后面,独立成一堆积木,所以需要在n堆积木的前后分别开一个长度为w的数组,所以整个数组的长度应该为n+2*w.

代码如下:

 #include<stdio.h>
#include<string.h> long long int a[],high[],low[]; //high数组用来保存前i个元素中比h高的部分的总和,low组用来保存前i个元素中比h低的部分的总和 int main()
{
int n,w,h; while(scanf("%d%d%d",&n,&w,&h)!=EOF)
{
long long int sum=;
memset(a,,sizeof(a));
memset(high,,sizeof(high));
low[]=; //注意初始化
for(int i=;i<=w;i++)
low[i]=i*h;
for(int i=w+;i<=w+n;i++)
{
scanf("%I64d",&a[i]);
sum+=a[i];
if(a[i]>h) //分类
{
high[i]=high[i-]+a[i]-h;
low[i]=low[i-];
}
else
{
low[i]=low[i-]+h-a[i];
high[i]=high[i-];
}
}
for(int i=w+n+;i<=n+w+w;i++)
{
high[i]=high[i-];
low[i]=low[i-]+h;
}
if(sum<(long long int)w*h)
{
printf("-1\n");
continue;
}
long long int step=;
for(int i=;i<=n+w+;i++)
{
if(high[i+w-]-high[i-]==low[i+w-]-low[i-])
{
if(step>high[i+w-]-high[i-])
step=high[i+w-]-high[i-];
}
if(high[i+w-]-high[i-]>low[i+w-]-low[i-])
{
if(step>high[i+w-]-high[i-])
step=high[i+w-]-high[i-];
}
if(high[i+w-]-high[i-]<low[i+w-]-low[i-])
{
if(step>low[i+w-]-low[i-])
step=low[i+w-]-low[i-];
}
}
printf("%I64d\n",step);
}
return ;
}

BestCoder Round #34_1002 以及 hdu 5191的更多相关文章

  1. BestCoder Round #32_1001 以及 hdu 5182

    http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=570&pid=1001 http://acm.hdu. ...

  2. HDU 5904 - LCIS (BestCoder Round #87)

    HDU 5904 - LCIS [ DP ]    BestCoder Round #87 题意: 给定两个序列,求它们的最长公共递增子序列的长度, 并且这个子序列的值是连续的 分析: 状态转移方程式 ...

  3. HDU 5908 Abelian Period (BestCoder Round #88 模拟+暴力)

    HDU 5908 Abelian Period (BestCoder Round #88 模拟+暴力) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=59 ...

  4. hdu 5667 BestCoder Round #80 矩阵快速幂

    Sequence  Accepts: 59  Submissions: 650  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 65536 ...

  5. hdu 5643 BestCoder Round #75

    King's Game  Accepts: 249  Submissions: 671  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 6 ...

  6. hdu 5641 BestCoder Round #75

    King's Phone  Accepts: 310  Submissions: 2980  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: ...

  7. hdu 5636 搜索 BestCoder Round #74 (div.2)

    Shortest Path  Accepts: 40  Submissions: 610  Time Limit: 4000/2000 MS (Java/Others)  Memory Limit: ...

  8. hdu 4956 Poor Hanamichi BestCoder Round #5(数学题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4956 Poor Hanamichi Time Limit: 2000/1000 MS (Java/Ot ...

  9. hdu 5195 DZY Loves Topological Sorting BestCoder Round #35 1002 [ 拓扑排序 + 优先队列 || 线段树 ]

    传送门 DZY Loves Topological Sorting Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131 ...

随机推荐

  1. hdu_1695: GCD 【莫比乌斯反演】

    题目链接 这题求[1,n],[1,m]gcd为k的对数.而且没有顺序. 设F(n)为公约数为n的组数个数 f(n)为最大公约数为n的组数个数 然后在纸上手动验一下F(n)和f(n)的关系,直接套公式就 ...

  2. 关于启动文件分析的(MDK-ARM) 【转】

    ;******************** (C) COPYRIGHT 2010 STMicroelectronics ******************** ;* File Name : star ...

  3. [bzoj 2243]: [SDOI2011]染色 [树链剖分][线段树]

    Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径上所有点都染成颜色c: 2.询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段),如“ ...

  4. 全面理解SSD和NAND Flash

    Flash Memory又叫做闪存,是一种非易失性存储器.非易失性是指断电之后数据不会丢失,这里就涉及到断电保护(后面详细讲解). 总体思路 1.NAND Flash的用途. 2.NAND Flash ...

  5. Asp.net MVC Razor常见问题及解决方法

    没有经验的童鞋就是这样磕磕碰碰出来的经验. 1,Datatype的错误提示消息无法自定义 这也许是Asp.net MVC的一个Bug.ViewModel中定义了DataType为Date字段: [Re ...

  6. 初学Python(八)——迭代

    初学Python(八)——迭代 初学Python,主要整理一些学习到的知识点,这次是迭代. # -*- coding:utf-8 -*- from collections import Iterabl ...

  7. FaceRank,最有趣的 TensorFlow 入门实战项目

    FaceRank,最有趣的 TensorFlow 入门实战项目 TensorFlow 从观望到入门! https://github.com/fendouai/FaceRank 最有趣? 机器学习是不是 ...

  8. 分享一个PHP文件上传类

    该类用于处理文件上传,可以上传一个文件,也可以上传多个文件. 包括的成员属性有: private $path = "./uploads"; //上传文件保存的路径 private ...

  9. python函数(6):内置函数和匿名函数

    我们学了这么多关于函数的知识基本都是自己定义自己使用,那么我们之前用的一些函数并不是我们自己定义的比如说print(),len(),type()等等,它们是哪来的呢? 一.内置函数 由python内部 ...

  10. python几种常见语法

    NO1.type自动匹配类型 name="zhangsan"age=18 print (type(name))#type自动匹配类型 print ("name:%s,ag ...