JZOJ 1329. 旅行
来源:互联网 发布:网络电影发展史 编辑:程序博客网 时间:2024/06/03 19:07
Description
今天是个神圣的日子,因为LHX教主要进行一段长途旅行。但是教主毕竟是教主,他喜欢走自己的路,让别人目瞪口呆。为什么呢,因为这条路线高低不平,而且是相当的严重。
但是教主有自己的办法,他会魔法。
这段路可以用一个长度为N的序列A[I]来表示,A[I]表示了第I这段路的高度。毕竟教主即使会使用魔法他还是个人,教主如果想穿越这条路线,他必须从第1段路开始走,走到第N段,从第I段走到第I+1段路需要消耗|A[I+1]-A[I]|点体力。为了节省体力,教主使出了他神奇的魔法。教主的魔法可以将一段路高度变高或者变低,但是使用魔法也需要体力,改变一段路H的高度就需要消耗H的体力。即若教主把第I段路高度从A[I]变成了K,那么他需要消耗|A[I]-K|点体力。
接着,LHX教主想规划下如何调整路段高度后穿越,使得总体力消耗最小。
Input
输入文件的第1行为一个正整数N,表示了这条路线的长度。
第2行有N个正整数,相邻两个正整数用空格隔开,描述了A[I]这个序列。
Output
输出文件仅包括一个非负整数,为最小的总体力消耗。
注意:答案可能超过2^31-1,请使用int64或者long long类型保存答案。
Sample Input
3
3 4 1
Sample Output
3
Data Constraint
Hint
【样例说明】
将第2段路的高度调整为3,第3段路的高度调整为2,调整体力消耗为2。
路线序列变为3 3 2,穿越这条路线消耗体力为1。
所以总体力消耗为3。
【数据规模】
对于10%的数据,有N≤10;
对于30%的数据,有A[I]≤1000;
对于40%的数据,有N≤1000;
对于100%的数据,有N≤100000,A[I]≤10000000。
分析
从左到右扫一遍,枚举第i段路。如果要使得从i-1到i+1的体力消耗最小,那么就要两端距离间的差距最小。
①如果a[i-1]和a[i+1]都小于a[i],那么就取两个中较大的,将a[i]改变;
②如果a[i-1]和a[i+1]都大于a[i],那么就取两个中较小的,将a[i]的值改变。
代码
#include <algorithm>#include <iostream>#include <cstring>#include <complex>#include <cstdio>#include <queue>#include <cmath>#include <map>#include <set>#define N 100005#define INF 0x7fffffff#define sqr(x) ((x) * (x))#define pi acos(-1)int read(){ int x = 0, f = 1; char ch = getchar(); while (ch < '0' || ch > '9'){if (ch == '-') f = -1; ch = getchar();} while (ch >= '0' && ch <= '9') {x = x * 10 + ch - '0'; ch = getchar();} return x * f;}int h[N];int val[N];int getVal(int i){ if (h[i] > h[i - 1] && h[i] > h[i + 1]) return std::max(h[i - 1], h[i + 1]); if (h[i] < h[i - 1] && h[i] < h[i + 1]) return std::min(h[i - 1], h[i + 1]); return h[i];}int main(){ int n = read(); for (int i = 1; i <= n; i++) h[i] = read(); for (int i = 2; i <= n; i++) { int tmp = getVal(i); val[i] = abs(h[i] - tmp); h[i] = tmp; } long long ans = 0; for (int i = 2; i <= n; i++) ans = ans + val[i] + abs(h[i] - h[i - 1]); printf("%lld\n",ans);}
- JZOJ 1329. 旅行
- [JZOJ 1281]旅行
- JZOJ 3053. 旅行
- 【JZOJ 3053】 旅行
- 【JZOJ 3053】旅行
- 旅行 jzoj 1281
- JZOJ 5268. 旅行
- [SDOI 2014] [JZOJ 3625] 旅行
- JZOJ 3101【NOIP2012提高组】开车旅行
- JZOJ.3400【GDOI2014模拟】旅行 解题报告
- jzoj 1402. 【2012.03.09普及组】旅行
- JZOJ 3053 【NOIP2012模拟10.25】旅行
- JZOJ 1329——旅行【贪心】
- 旅行
- 旅行
- 旅行...
- 旅行
- 旅行
- 解决Whoops, looks like something went wrong.
- springMVC使用jersey上传图片到图片服务器
- malloc/free和new/delete的区别
- 10分钟掌握Linux vi编辑器常见命令的使用,最简单的vi编辑器教程
- linux 下的sed awk
- JZOJ 1329. 旅行
- HTML <!DOCTYPE> 标签
- MySQL 常用操作
- 数据库事物的 ACID 属性和 5 种状态
- jquery 设置、取消disabled、checked 等属性
- Git 入门
- HeapSort(堆排序)
- 常用函数
- leetcode75. Sort Colors