【題目鏈結】:
【題意】
【題解】
/*
按照t2公升序排
順序列舉每乙個建築;
如果當前建築能夠修理;
則修理它;
並將它的t1值加入到堆中;
然後累加當前所用的時間now;
如果加了這個t1之後會大於t2則這個建築沒辦法修理;
則在堆裡面去找
看看有沒有比t1大的值;
如果有的話,就改修這個建築;而那個建築不修了;
這樣雖然不能增加修理的建築的個數;
但是now的值會減小;
增加了後面能夠新修理建築的機會.
因為now是肯定小於等於t2的,
所以更換以後,相當於是在確定的時間範圍裡面
有兩個建築都能修好;
但不能同時修好;
則當然先修那個修的時間短的了。
開long long安全點。
用stl的priority_queue很方便。
*/
【完整**】
#include
using
namespace
std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define ll long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%lld",&x)
#define ref(x) scanf("%lf",&x)
typedef pair pii;
typedef pairpll;
const
int dx[9] = ;
const
int dy[9] = ;
const
double pi = acos(-1.0);
const
int n = 15e4+100;
struct node
};struct abc
;priority_queueq;
node tq;
abc a[n];
int n,ans;
ll now;
void in()
}bool cmp(abc a, abc b)
void ga()
else}}
}void out()
int main()
bzoj1029 JSOI2007 建築搶修
傳送門 貪心顯然。1.按照最後時限排序,暴力插入。但是顯然會錯。10 10 10 20 2 21 2 21 2 21 答案是2,但是顯然最優的是4 於是考慮改進。2.在無法修理時我們可以放棄花費時間最長的工作。明顯花費時間最長的工作時間大於當前工作是修改更優。我們可以用乙個大根堆實現。然後就通過了。...
bzoj1029 JSOI2007 建築搶修
time limit 4 sec memory limit 162 mb submit 4807 solved 2157 submit status discuss 小剛在玩jsoi提供的乙個稱之為 建築搶修 的電腦遊戲 經過了一場激烈的戰鬥,t部落消滅了所有z部落的 入侵者。但是t部落的基地裡已經...
bzoj1029 JSOI2007 建築搶修
description 小剛在玩jsoi提供的乙個稱之為 建築搶修 的電腦遊戲 經過了一場激烈的戰鬥,t部落消滅了所有z部落的 入侵者。但是t部落的基地裡已經有n個建築設施受到了嚴重的損傷,如果不盡快修復的話,這些建築設施將會完全 毀壞。現在的情況是 t部落基地裡只有乙個修理工人,雖然他能瞬間到達任...