1. 程式人生 > >Touch The Sky (氣球抉擇 優先佇列)

Touch The Sky (氣球抉擇 優先佇列)

題意:

你的飛艇有n個一次性氣球,開始你在海拔0m位置,每一個氣球有一個L和D,你在小於等於L的位置才可以使用這個氣球,使你的海拔上升D。問我最多可以使用幾個氣球

解析:

設A=L+D,對於兩個氣球x和y,他們的A為Ax和Ay。顯然當Ax<Ay時,我會優先考慮Ax,因為用完Ax後還可能用Ay,但是用完Ay後一定不能再用Ax。

而且我們還可以反悔,即如果先Ax後,發現不能用了Ay(Ax>Ly),我們得到的結論為,xy中最多隻能用一個,那麼我們當然會選擇其中D小的那個,以增加後面的氣球可以被使用的可能性

#include<bits/stdc++.h>
using namespace std;
typedef long long ll; const int maxn=250005; struct node{ ll L,D,all; }e[maxn]; bool cmp(node a,node b){ return a.all<b.all; } int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%lld%lld",&e[i].L,&e[i].D); e[i].all=e[i].L+e[i].D; }
sort(e+1,e+1+n,cmp); ll nowhei=0; priority_queue<int> q; for(int i=1;i<=n;i++){ nowhei+=e[i].D; q.push(e[i].D); if(nowhei>e[i].all){ int dec=q.top(); q.pop(); nowhei-=dec; } } printf("%d\n",q.size()); return
0; }

相關推薦

Touch The Sky 氣球抉擇 優先佇列

題意: 你的飛艇有n個一次性氣球,開始你在海拔0m位置,每一個氣球有一個L和D,你在小於等於L的位置才可以使用這個氣球,使你的海拔上升D。問我最多可以使用幾個氣球 解析: 設A=L+D,對於兩個氣球x和y,他們的A為Ax和Ay。顯然當Ax<Ay時,我會優

二叉樹堆和優先佇列

堆是一種特殊的二叉樹。 最小值堆:最小值堆的特性。 對於堆的任意非葉節點K,K的值總是小於或者等於左右子節點。 K <= 左節點;K <= 又節點; 堆例項: 堆實際上是一個完全二叉樹(若設二叉樹的深度為h,除第 h 層外,其它各層 (1~h-1)

Codeforces Round #390 (Div. 2)(A,B,C(記憶化搜尋),D貪心,優先佇列)

/* Codeforces Round #390 (Div. 2) 時間: 2017/02/16 A. Lesha and array splitting 題意:將集合分成幾個小集合,要求小集合的和不為0. 題解:遍歷過去,一直到不滿足集合並數字非0前生成一個集合 */ #

Expedition POJ 2431 貪心與優先佇列

題面: A group of cows grabbed a truck and ventured on an expedition deep into the jungle. Being rather poor drivers, the cows unfortunately managed to

201803-4 棋局評估動態規劃+優先佇列

試題編號: 201803-4 試題名稱: 棋局評估 時間限制: 1.0s 記憶體限制: 256.0MB 問題描述: 問題描述   Alice和Bob正在玩井字棋遊戲。   井字棋遊戲的規則很簡單:兩人輪流往3

UVa 11134 Fabled Rooks貪心+優先佇列

題目連結 題目大意:     在一個棋盤上,放置N個國際象棋的城堡,每個城堡給出可以放置的範圍,要求這些城堡不能相互攻擊到,求這些城堡的擺放方案。 解題思路:     這題非常關鍵的一點就是橫縱座標可以分開獨立考慮。對於每一個方向,我們維護一個下限小(其次上線小)的區間

CCF-CSP-2017-3-4 地鐵修建結構體優先佇列

題目:問題描述  A市有n個交通樞紐,其中1號和n號非常重要,為了加強運輸能力,A市決定在1號到n號樞紐間修建一條地鐵。  地鐵由很多段隧道組成,每段隧道連線兩個交通樞紐。經過勘探,有m段隧道作為候選,

Gym 101806T Touch The Sky 思維 優先佇列

題目連結:http://codeforces.com/gym/101806/problem/T   題意:         你現在在海拔為0的地方,你現在手上有n個氣球,每個氣球有一個最高可吹海拔L(即如果你當前所在超過了這個高度,你

Hdu 1026 Ignatius and the Princess Ibfs記錄路徑優先佇列

Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission

hdu 4006 The kth great number優先佇列

Problem Description Xiao Ming and Xiao Bao are playing a simple Numbers game. In a round Xiao Ming c

HDU4006 The kth great number————棧和佇列優先佇列

Xiao Ming and Xiao Bao are playing a simple Numbers game. In a round Xiao Ming can choose to write down a number, or ask Xiao Bao w

最小n個和優先佇列

給出兩個包含 nn 個整數的陣列 AA,BB。分別在 AA, BB 中任意出一個數並且相加,可以得到 n^2n2個和。求這些和中最小的 nn 個。 輸入格式輸入第一行一個整數 n(1 \le n \le 50

洛谷4404 [JSOI2010]快取交換貪心優先佇列

題目 在計算機中,CPU只能和快取記憶體Cache直接交換資料。當所需的記憶體單元不在Cache中時,則需要從主存裡把資料調入Cache。此時,如果Cache容量已滿,則必須先從中刪除一個。 例如,當前Cache容量為3,且已經有編號為10和20的主存單元。 此時,CPU訪問編號為10的主存

中位數 優先佇列

中位數 這種題型比較常見,所以總結下來為妙。 一般暴力的方法是找到排一個序,然後輸出中間點。 然後正解的方法是優先佇列。 解法 一個大根堆一個小根堆,用於儲存中位數左邊的數和中位數右邊的數。 然後每一次插入某個數的時候,可以插入到中間,然後判斷左右兩個堆的大小,保持均等即可。 #include &l

優先佇列P1631 序列合併

https://www.luogu.org/problemnew/show/P1631 有兩個長度都是N的序列A和B,在A和B中各取一個數相加可以得到N^2 個和,求這N^2個和中最小的N個。 Ai <= 1e9, Bi <= 1e9, N <= 1e5. 直接暴力用優

資料結構--6堆優先佇列

操作 插入:空穴上濾策略,新元素在堆中上濾直到找出正確位置。 刪除最小者(DeleteMin):返回並刪除佇列中最小的元素,將堆中最後一個元素放入合適位置,空穴下濾策略。 限制:不能進行Find操作。  實現方式 1.利用簡單鏈表,在表頭O(1)插入,遍歷刪除最小元;或者

hdu 4857 逃生反向拓撲排序+優先佇列

逃生 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7786  

51nod 1672優先佇列樹狀陣列

1672 區間交  基準時間限制:1 秒 空間限制:131072 KB 分值: 40 難度:4級演算法題  收藏  關注 小A有一個含有n個非負整數的數列與m個區間,每個區間可以表示為li,ri。 它

CCF-CSP201609-4 交通規劃Dijkstra+優先佇列

題目連結 問題描述 試題編號: 201609-4 試題名稱: 交通規劃 時間限制: 1.0s 記憶體限制: 256.0MB 問題描述: 問題描述   G國國王來中國參觀後,被中國的高速鐵路深深的震撼,決定為自己

CCF 公共鑰匙盒模擬、排序、優先佇列

問題描述 試題編號: 201709-2 試題名稱: 公共鑰匙盒 時間限制: 1.0s 記憶體限制: 256.0MB 問題描述: 問題描述   有一個學校的老師共用N個教室,按照規定,所有的鑰匙都必須放在公共鑰匙盒