远征队(expedition) 代码(C)

本文地址: http://blog.csdn.net/caroline_wendy

题目: 远征队有一辆卡车须要行驶L单位的距离, 開始时, 车上有P单位的汽油, 每开1单位须要1单位的汽油.

途中有N个加油站A, 每一个加油站能加油B, 油箱容量无限大, 假设能到达终点, 求最小加油次数.

比如: 须要行驶L=25的距离, 起始有P=10单位汽油, 有N=4个加油站, 

加油站到起始位置的距离A={10, 14, 20, 21}, 能够加的汽油B={10,5,2,4},

则result=2, 在(10,10) (14,5)处加油, 即加了15, 起始10, 行驶25.

使用堆(heap), 即优先级队列(priority_queue)进行求解.

在到达加油站i时, 就获得了一次在之后的不论什么时候都能够加B单位汽油的权利.

在每次到达加油站之前判定, 是否须要加前面的汽油, 时间复杂度O(nlogn).

代码:

/*
* main.cpp
*
* Created on: 2014.7.20
* Author: spike
*/ /*eclipse cdt, gcc 4.8.1*/ #include <stdio.h> #include <queue>
#include <vector>
#include <functional> using namespace std; class Program {
static const int MAX_N = 100;
int L=25, P=10, N=4;
int A[MAX_N+1] = {10, 14, 20, 21}, B[MAX_N+1] = {10, 5, 2, 4};
public:
void solve() {
A[N] = L; //终点也当作一个加油站
B[N] = 0;
N++; priority_queue<int> que;
int ans = 0, pos = 0, tank =P;
for (int i=0; i<N; ++i) {
int d= A[i]-pos;
while (tank-d<0) {
if (que.empty()) {
puts("-1\n");
return;
}
tank += que.top();
que.pop();
ans++;
}
tank -= d;
pos = A[i];
que.push(B[i]);
}
printf("result=%d\n", ans);
}
}; int main(void)
{
Program iP;
iP.solve(); return 0;
}

输出:

result=2

编程算法 - 远征队(expedition) 代码(C)的更多相关文章

  1. 编程算法 - 字典分词 代码(C)

    字典分词 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 给定字典, 给定一句话, 进行分词. 使用深度遍历(DFS)的方法. 使用一个參数string ...

  2. 编程算法 - 分割数 代码(C)

    分割数 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 有n个无差别的物品, 将它们划分成不超过m组, 求出划分方法数模M的余数. 比如: n= ...

  3. 编程算法 - 数丑陋 代码(C)

    数丑陋 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 我们把仅仅包括因子2, 3 和 5的数称作丑数. 求按从小到大的顺序的第5个丑数. 能够 ...

  4. 编程算法 - 区间调度问题 代码(C)

    区间调度问题 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 有n项工作, 每项工作分别在s时间開始, 在t时间结束. 对于每项工作能够选择參与 ...

  5. 编程算法 - 切割排序 代码(C)

    切割排序 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 排序切割, 把一个数组分为, 大于k\小于k\等于k的三个部分. 能够使用高速排序的Parti ...

  6. 编程算法 - 二部图确定 代码(C)

    二部图确定 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 给定一个具有n个顶点的图. 要给图上每一个顶点染色, 而且要使相邻的顶点颜色不同.  ...

  7. 编程算法 - 全然背包问题 代码(C)

    全然背包问题 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 有n个重量和价值分别为w,v的物品, 从这些物品中挑选出总重量不超过W的物品, 求 ...

  8. 对一致性Hash算法,Java代码实现的深入研究

    一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性 ...

  9. 游戏编程算法与技巧 Game Programming Algorithms and Techniques (Sanjay Madhav 著)

    http://gamealgorithms.net 第1章 游戏编程概述 (已看) 第2章 2D图形 (已看) 第3章 游戏中的线性代数 (已看) 第4章 3D图形 (已看) 第5章 游戏输入 (已看 ...

随机推荐

  1. 去除inline-block元素间距

  2. 韦东山ARM裸机笔记(1)

    1.一个嵌入式Linux系统的软件组成:单片机大全Bootloader-->Linux驱动-->Linux APP-->Linux GUI(Android/QT) 2.驱动程序=软件 ...

  3. Windows学习总结(3)——成为电脑高手必备的cmd命令大全

    曾经看电影和电视里面电脑黑客快速敲击电脑键盘,一行行命令在电脑屏幕闪过,一个回车过后,一排排英文象走马灯一样在屏幕上转瞬即逝,那才是我们梦寐以求的高手,有木有!实际上,不光是黑客和系统维护人员,一般的 ...

  4. 利用JAVA反射机制实现调用私有方法

    1.fragment是AccessibilityFragment的對象.须要被調用的方法的類. setAccessible(true)并非将方法的訪问权限改成了public.而是取消java的权限控制 ...

  5. C. Arthur and Table(Codeforces Round #311 (Div. 2) 贪心)

    C. Arthur and Table time limit per test 1 second memory limit per test 256 megabytes input standard ...

  6. java / C++ B+树代码

    C++ 代码 #include <> JAVA 代码 package org.test.me.struct; /** * author: shuly * create: 2018-09-1 ...

  7. 使WordPress改域名后网站正常运行的方法

    使WordPress改域名后网站正常运行的方法 wp-content/wp-config.php $path = '/blog'; $scheme = (isset($_SERVER['HTTPS'] ...

  8. POJ 3220 Jessica's Reading Problem

    Jessica's Reading Problem Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12944   Accep ...

  9. 右键菜单→新建→BAT 批处理文件

    目的:以前编写BAT,通常新建一个文本,然后另存为 .bat,比较麻烦,那么如何右键新建菜单里添加新建批处理文件呢? 代码如下: @echo offcd /d %temp%echo Windows R ...

  10. 《社交红利》读书总结--如何从微信微博QQ空间等社交网络带走海量用户、流量与收入

    <社交红利--如何从微信微博QQ空间等社交网络带走海量用户.流量与收入>--徐志斌 著 <社交红利>这本书2013年9月才上市,卖的非常火. 我最初是在公司内部的期刊上,看到有 ...