UVA1442_Cave
Cave
大致题意:
一个洞穴,已经i位置地面高度和顶的高度,要求在这个洞穴里面储蓄尽可能多的燃料,而且任何位置燃料不能碰到顶点
思路:
先从左往右扫描一下得出每一个点燃料能达到的最大高度,然后右边一样扫一遍,两个取最小值,然后累加
看起来很简单,可是实践起来很麻烦,需要讨论好不同条件下的最大高度!!!!
首先我们假设一个位置左端的最大高度为h
那么i+1位置地面高度p,顶点高度是s.
如果p>h,说明燃料被阻断!!!i+1位置上最大高度为自己!!!
如果s<h,说明当前最大高度还是h
如果p<h,最大高度和之前相同
反正扫描一下,就好了,这样充分保证了一个点左右均合法了!!!!
这个和以前遇到的最大长方形面积很相似
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<queue>
#include<cstdlib>
#include<algorithm>
#include<stack>
#include<map>
#include<queue>
#include<vector> using namespace std;
const int maxn = 1e6+100;
#define pr(x) cout << #x << " = " << x << " ";
#define prln(x) cout << #x << " = " << x <<endl;
#define ll long long
int p[maxn], s[maxn], h[maxn], lev, ans, n;
int main(){
#ifdef LOCAL
freopen("C:\\Users\\User Soft\\Desktop\\in.txt","r",stdin);
//freopen("C:\\Users\\User Soft\\Desktop\\out.txt","w",stdout);
#endif
int t; cin >> t;
while(t--) {
cin >> n;
ans = 0;
for(int i = 0; i < n; ++i) scanf("%d", p +i);
for(int i = 0; i < n; ++i) scanf("%d", s +i);
lev = s[0];
for(int i = 0; i < n; ++i) {
if(lev < p[i]) lev = p[i];
if(lev > s[i]) lev = s[i];
h[i] = lev;
}
lev = s[n-1];
for(int i = n-1; i >= 0; --i) {
if(lev < p[i]) lev = p[i];
if(lev > s[i]) lev = s[i];
ans += min(lev, h[i]) - p[i];
}
cout << ans << endl;
}
return 0;
}
UVA1442_Cave的更多相关文章
随机推荐
- python读取ini文件时,特殊字符的读取
前言: 使用python在读取配置文件时,由于配置文件中存在特殊字符,读取时出现了以下错误: configparser.InterpolationSyntaxError: '%' must be fo ...
- Java arraylist重复使用问题
arraylist同一个实例重复使用时,需要使用clear()及时清空,否则会在上次的结果后面添加项. List<Double> weightsList = new ArrayList&l ...
- CodeChef Sereja and GCD
Sereja and GCD Problem code: SEAGCD Submit All Submissions All submissions for this problem ar ...
- Leetcode Lect3 二分法总结
二分法模板 非递归版本: public class Solution { /** * @param A an integer array sorted in ascending order * @pa ...
- Mysql命令收集【重要】
1.在linux上获取Mysql服务器状态,及版本: [root@host]# mysqladmin --version 结果信息: mysqladmin Ver 8.42 Distrib 5.7. ...
- mybatis where 中in的使用
当我们使用mybatis时,在where中会用到 in 如: where name in ('Jana','Tom'); 我们可以在sql中直接写 name in ('Jana','Tom') 或者 ...
- 常见前端面试题CSS部分
1.盒模型 IE 盒子模型:IE的width部分包含了 border 和 pading; 标准 W3C 盒子模型: width/height+border+padding+margin; 2.清除浮动 ...
- tensorflow创建cnn网络进行中文手写文字识别
数据集下载地址:http://www.nlpr.ia.ac.cn/databases/handwriting/download.html chinese_write_detection.py # -* ...
- Java中的关键字--volatile
volatile关键字经常用来修饰变量.不过,volatile本身很容易被误用.本篇就介绍一下volatile的原理和使用方式. 在介绍volatile关键字原理前,我们首先要了解JVM运行时的内存分 ...
- 2019年 Java 面试题解析
2019年 Java 面试题解析 转载地址:https://www.cnblogs.com/Zz-maker/p/11193930.html 作者: Zz_maker 包含的模块: 本文分为十九个模块 ...