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的更多相关文章

随机推荐

  1. [暑假集训Day3T3]平板涂色

    同样是搜索经典题. 优化并不多,只需在当前步数已经大于目前答案时剪枝就可以了. 此题重点在于如何判断第k个矩形能不能选. 设矩形i的左上坐标为i(squ[i].upx,squ[i].upy),右下角坐 ...

  2. Stupid cat & Doge (分形图)

    [题目描述] [题目链接] http://noi.openjudge.cn/ch0204/8463/ [算法] 为求等级N下的点的坐标可由几何关系找到其与等级N-1下对应点的关系,然后递归直至所有点的 ...

  3. project euler-34

    145是个奇怪的数字.由于1!+ 4! + 5! = 1 + 24 + 120 = 145. 请求出能表示成其每位数的阶乘的和的全部数的和. 请注意:由于1! = 1和2! = 2不是和,故它们并不包 ...

  4. git-ssh-keygen

    ssh-keygen 先看本地是否已经有了密钥 cd ~/.ssh 该文件夹下会包含两个文件 id_rsa --私钥 id_rsa.pub --公钥 如果没有这两个文件的话就需要重新生成(有的话使用一 ...

  5. lvm相关

    LVM 概念:PV(单个硬件)--VG(组合)--LV(分区) pv打头的:代表pv相关的命令vg带头的:代表vg相关的命令lv带头的: 代表lv相关的命令 create:创建相关remove:移除相 ...

  6. ArrayList、LinkedList、Vector区别

    ArrayList.LinkedList.Vector均为可伸缩数组,即可以动态改变长度的数组. 比较ArrayList和Vector: 1. 共同点: ArrayList和Vector都是基于Obj ...

  7. CentOS 7.4 安装python3及虚拟环境

    [转]:https://www.centos.bz/2018/05/centos-7-4-%e5%ae%89%e8%a3%85python3%e5%8f%8a%e8%99%9a%e6%8b%9f%e7 ...

  8. IT路上可能遇到的小需求资源汇总

    jar文件打包为window service tomcat打包为window service springboot的jar包打包为window service

  9. ApplicationContext用法示例

    1.通过ApplicationContext将bean注入容器中 import org.springframework.context.ApplicationContext; import org.s ...

  10. MFC的DoModal(转)

    DoModal会产生模态对话框(有模式的对话框,有“是”或者“否”供用户选择),函数运行到此处后不会马上返回,会等待用户的响应(响应后对话框销毁),在此对话框未销毁前,其他窗口不会接收到用户的输入(注 ...