uva 1442:Cave(贪心)
2014-09-23 21:37
253 查看
题意:一个洞穴长n,告诉你每个位置的地面高度和顶部高度,让你往里灌水,要求水不能碰到天花板(但可以无限接近)。求最多的水量。(洞穴两边视为封闭)
思路:如果知道一个位置向左看最高可以多高,向右看最高可以多高,就可以知道这个位置最终的高度了。方法是扫两次。每次扫的时候,定义一个之前最高值。若之前最高值高于现在的顶,则下降至顶。若低于底,则上升至底(因为后面的这种高度能被这个底挡住)。如果在中间则不用变。
代码:
思路:如果知道一个位置向左看最高可以多高,向右看最高可以多高,就可以知道这个位置最终的高度了。方法是扫两次。每次扫的时候,定义一个之前最高值。若之前最高值高于现在的顶,则下降至顶。若低于底,则上升至底(因为后面的这种高度能被这个底挡住)。如果在中间则不用变。
代码:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 1000010 int p ; int s ; int main() { int t; scanf("%d", &t); while (t--) { int n; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", &p[i]); } for (int i = 0; i < n; i++) { scanf("%d", &s[i]); } int tmp = 0x3f3f3f3f; for (int i = 0; i < n; i++) { tmp = min(tmp, s[i]); tmp = max(tmp, p[i]); s[i] = tmp; } tmp = 0x3f3f3f3f; for (int i = n-1; i >= 0; i--) { tmp = min(tmp, s[i]); tmp = max(tmp, p[i]); s[i] = tmp; } int ans = 0; for (int i = 0; i < n; i++) { ans += s[i]-p[i]; } printf("%d\n", ans); } return 0; }
相关文章推荐
- UVA 1442 Cave 洞穴 (贪心+扫描)
- UVa 1442 (线性扫描) Cave
- 【高效算法设计——双向扫描】 UVa 1442 Cave
- 例题8-18 洞穴(Cave, ACM/ICPC CERC 2009, UVa1442)
- uva1442 cave
- UVA1442 Cave
- UVA 1442(p249)----Cave
- uva 1442 - Cav(贪心)
- UVA1442_Cave
- UVa 1617 Laptop (贪心)
- UVa 11134 Fabled Rooks 虚拟的车 - 贪心+思维
- UVALive 7147 World Cup(数学+贪心)(2014 Asia Shanghai Regional Contest)
- UVa 10026 Shoemaker's Problem (贪心)
- Uva-7423-Assigning Workstations(贪心+优先队列)
- uva11520(贪心)
- uva 1531 & poj 1518 Problem Bee(几何计算+贪心)
- uva 10041 Vito's Family_贪心
- uva1368(贪心)
- Minimal coverage -uva 覆盖线段,贪心
- [贪心]uva311 Packets