[BZOJ2240]积木游戏
来源:互联网 发布:桔子桌面软件 编辑:程序博客网 时间:2024/06/04 17:59
题目描述
小时候我们都喜欢玩积木。这里的积木都是单位边长的正方体块,多个积木可以堆成一个“高木”,“高木”的高度就是叠放的积木块个数。多个“高木”形成一个排列,如果高度满足先严格上升再严格下降,则称这个排列为一座山峰。严格的定义是:假设有N个高木从左到右排列,第i个高度为H[i](i=1,2,……N)。那么如果存在一个整数k[2,N-1],使得对所有的位置i,下式都成立,则称H是一座山峰。
H[i]>H[i-1],1<i<=k
H[i]>H[i+1],k<i<=N现在你有一个超级工具,每次操作可以给一段连续的区间各位置都叠放上一块积木,使得高度同时增加1个单位,现在有一个“高木”排列,需要将其改造为一座山峰,只允许使用这种超级工具,最少需要操作几次可以达到这个目标呢?假设积木无限供应。
输入
输入文件只有一组数据。
第一行包含一个整数N,为上文提到的初始排列中“高木”的个数。第二行包含N个正整数,表示由左到右的N个位置“高木”的初始高度H[i],数字由空格隔开。
输出
输出包含一个整数,表示所需要的最少的操作次数。
样例输入
63 4 3 6 7 8
样例输出
2
提示
对于30%的数据,满足N<=20,H[i]<=50.
对于50%的数据,满足N<=100,H[i]<=1000对于全部的数据,满足3<=N<=105,H[i]<=107
题解:贪心。没错,是贪心,不是dp。
先考虑一个更简单的问题,如果我们的目标排列是严格递增,需要多少次操作?
考虑到操作的这样几个性质:
第一:操作是无序的。第二:操作的区间可以由i~j扩充到i~n,而并不影响最优解。
对于第i根高木,如果其高度h[i]<=h[i-1],则需要对i~n进行h[i-1]-h[i]+1次操作;否则就不需要。最优解为每根高木所需要的操作次数之和,用ans表示。
现在回到原问题。
原问题可以看做是两个严格上升序列的组合。所以,最终最优解为两个上升序列所需操作的最大值,即ans=max(ans1,ans2)#include<iostream>#include<cstring>#include<cstdio>#include<cstdlib>#include<cmath>#include<algorithm>using namespace std;const int N=1e5+10;long long n, h[N], ans[2][N], sum;int main() {scanf( "%lld%lld", &n, &h[1] );for( int i=2; i<=n; i++ ) {scanf( "%lld", &h[i] );if( h[i-1]>=h[i] ) ans[0][i]=h[i-1]-h[i]+1;ans[0][i]+=ans[0][i-1];}sum=ans[0][n];for( int i=n-1; i; i-- ) {if( h[i]<=h[i+1] ) ans[1][i]=h[i+1]-h[i]+1;ans[1][i]+=ans[1][i+1];sum=min( sum, max( ans[0][i], ans[1][i] ) );}printf( "%lld\n", sum );return 0;}
阅读全文
0 0
- [BZOJ2240]积木游戏
- #bzoj2240#积木游戏(DP? 贪心?)
- 积木游戏
- 积木游戏 vijos
- java 积木游戏
- 【NOI1997】积木游戏
- java 积木游戏
- 动态规划 积木游戏
- NOI 97 积木游戏
- 积木游戏 (Standard IO)
- 积木游戏 (Standard IO)
- noi1997积木游戏
- Vijos 1464积木游戏
- 【Noip2013】积木游戏
- NOI1029 积木游戏(dp)
- 【A*算法】滑动积木游戏
- cogs261 [NOI1997] 积木游戏(dp)
- Vijos P1464 积木游戏(动态规划)
- 构造代码块、静态代码块、构造方法的执行顺序
- mysql数据库面试总结
- 三、python小程序实例(python编写cgi服务)
- Android Battery视图界面分析
- 游戏界面的提示帮助(根据鼠标点击选取显示位置)
- [BZOJ2240]积木游戏
- NOIP机房模拟 【计算几何】【花花的聚会】【文本编辑器】
- 【Azure】CentOs虚拟机创建及NGUNX安装
- C++各种指针声明
- 利用jxl读取xls文件
- nodejs使用domain捕获工作进程异常
- 常用git命令
- array_map函数在PHP类中调用内部方法简介
- 利用HAProxy代理SQL Server