NKOJ 3540 方块游戏(dp)
来源:互联网 发布:应变数据采集仪 编辑:程序博客网 时间:2024/05/22 10:37
P3540积木游戏
问题描述
小时候我们都喜欢玩积木。这里的积木都是单位边长的正方体块,多个积木可以堆成一个“高木”,“高木”的高度就是叠放的积木块个数。多个“高木”形成一个排列,如果高度满足先严格上升再严格下降,则称这个排列为一座山峰。严格的定义是:假设有N个高木从左到右排列,第i个高度为H[i](i=1,2,...,N)。那么如果存在一个整数k[2,N-1],使得对所有的位置i,下式都成立,则称H是一座山峰。H[i]>H[i-1],1<i<=kH[i]>H[i+1],k<i<=N现在你有一个超级工具,每次操作可以给一段连续的区间各位置都叠放上一块积木,使得高度同时增加1个单位,现在有一个“高木”排列,需要将其改造为一座山峰,只允许使用这种超级工具,最少需要操作几次可以达到这个目标呢?假设积木无限供应。
输入格式
输入文件只有一组数据。第一行包含一个整数N,为上文提到的初始排列中“高木”的个数。第二行包含N个正整数,表示由左到右的N个位置“高木”的初始高度H[i],数字由空格隔开。
输出格式
输出包含一个整数,表示所需要的最少的操作次数。
样例输入
6 3 4 3 6 7 8
样例输出
2
提示
对于30%的数据,满足N<=20,H[i]<=50.对于50%的数据,满足N<=100,H[i]<=1000对于全部的数据,满足3<=N<=10^5,H[i]<=10^7
此题我们考虑计算两个值,
计算
那么最后
代码:
#include<stdio.h>#include<iostream>#include<algorithm>#define N 123456using namespace std;int n,A[N],L[N],R[N],ans=1e9;int main(){ int i,j,k,tmp; scanf("%d",&n); for(i=1;i<=n;i++)scanf("%d",&A[i]); for(i=2;i<=n;i++) { if(A[i]<=A[i-1])L[i]=A[i-1]+L[i-1]+1-A[i]; else L[i]=L[i-1]; } for(i=n-1;i>=1;i--) { if(A[i]<=A[i+1])R[i]=A[i+1]+R[i+1]+1-A[i]; else R[i]=R[i+1]; } for(i=1;i<=n;i++)ans=min(ans,max(L[i],R[i])); cout<<ans;}
阅读全文
0 0
- NKOJ 3540 方块游戏(dp)
- NKOJ-3698 方块消除
- NKOJ-4223 彩色方块
- (2017夏令营CONTEST4) NKOJ 3824 解密游戏(trie,dp)
- NKOJ 1314 爬山(背包dp)
- NKOJ 1725 数字(数位dp)
- NKOJ 3545 接近(DP+单调队列)
- NKOJ 4191 Trie (状压dp)
- NKOJ 4250 小区划分(dp)
- NKOJ 3500 独立集(dp)
- NKOJ 2409 田忌赛马 (DP)
- NKOJ 1987 手机游戏(高斯消元)
- NKOJ 4239 追捕游戏(LCA)
- NKOJ 4042 (CQOI 2017) 老C的方块(最小割+染色)
- 10559 - Blocks(方块消除|DP)
- NKOJ-4239 追捕游戏
- nkoj 4239 追捕游戏
- NKOJ 2655 (HAOI 2010)计数(数位DP)
- SAP ABAP AT NEW 和AT END OF的用法
- iOS 同一个工程下 使用多target来构建大量相似App
- 双飞翼布局 移动端header常用布局
- C#
- 原生PDF与扫描PDF转换教程
- NKOJ 3540 方块游戏(dp)
- CodeForces 845C Two TVs (模拟)
- 计算机开机BIOS初始化与MBR操作系统引导详解
- 对jquery-gantt的应用
- poj_1611_并查集 题解记录
- kylin安装及配置
- Mybatis --- 映射文件、参数处理、参数值的获取、select元素
- rabbitmq队列模式
- 网页设计排版中哪些元素最重要?