javascript
Bzoj1029 [JSOI2007]建筑抢修
Submit:?4452??Solved:?2006
Description
小剛在玩JSOI提供的一個(gè)稱之為“建筑搶修”的電腦游戲:經(jīng)過了一場(chǎng)激烈的戰(zhàn)斗,T部落消滅了所有z部落的
入侵者。但是T部落的基地里已經(jīng)有N個(gè)建筑設(shè)施受到了嚴(yán)重的損傷,如果不盡快修復(fù)的話,這些建筑設(shè)施將會(huì)完全
毀壞。現(xiàn)在的情況是:T部落基地里只有一個(gè)修理工人,雖然他能瞬間到達(dá)任何一個(gè)建筑,但是修復(fù)每個(gè)建筑都需
要一定的時(shí)間。同時(shí),修理工人修理完一個(gè)建筑才能修理下一個(gè)建筑,不能同時(shí)修理多個(gè)建筑。如果某個(gè)建筑在一
段時(shí)間之內(nèi)沒有完全修理完畢,這個(gè)建筑就報(bào)廢了。你的任務(wù)是幫小剛合理的制訂一個(gè)修理順序,以搶修盡可能多
的建筑。
Input
第一行是一個(gè)整數(shù)N接下來N行每行兩個(gè)整數(shù)T1,T2描述一個(gè)建筑:修理這個(gè)建筑需要T1秒,如果在T2秒之內(nèi)還
沒有修理完成,這個(gè)建筑就報(bào)廢了。
Output
輸出一個(gè)整數(shù)S,表示最多可以搶修S個(gè)建筑.N < 150,000;? T1 < T2 < maxlongint
Sample Input
4100 200
200 1300
1000 1250
2000 3200
Sample Output
3HINT
Source
?
貪心
憑感覺盲狙了兩個(gè)貪心方案:
1、按結(jié)束時(shí)間排序,能修就修。不能修的時(shí)候,如果不修之前耗時(shí)最多的那個(gè)就能讓這個(gè)被修好,就用這個(gè)替換耗時(shí)最多的建筑。
WA
2、發(fā)現(xiàn)并不需要當(dāng)前這個(gè)一定被修好,只要用這個(gè)替換之前耗時(shí)最多的,能讓累計(jì)耗時(shí)減少,就替換。
AC
1 /*by SilverN*/ 2 #include<algorithm> 3 #include<iostream> 4 #include<cstring> 5 #include<cstdio> 6 #include<cmath> 7 #include<queue> 8 #include<vector> 9 #define LL long long 10 using namespace std; 11 const int mxn=200010; 12 int read(){ 13 int x=0,f=1;char ch=getchar(); 14 while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();} 15 while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();} 16 return x*f; 17 } 18 struct task{ 19 int t1,t2; 20 }a[mxn]; 21 int cmp(const task a,const task b){ 22 return a.t2<b.t2; 23 } 24 priority_queue<int>q; 25 int n; 26 int ans=0; 27 int main(){ 28 int i,j; 29 n=read(); 30 for(i=1;i<=n;i++){ 31 a[i].t1=read();a[i].t2=read(); 32 } 33 sort(a+1,a+n+1,cmp); 34 int now=0; 35 for(i=1;i<=n;i++){ 36 if(a[i].t1+now<=a[i].t2){ 37 now+=a[i].t1; 38 q.push(a[i].t1); 39 ++ans; 40 } 41 else if(!q.empty()){ 42 int tmp=q.top(); 43 if(tmp>a[i].t1){ 44 now=now-tmp+a[i].t1; 45 q.pop(); 46 q.push(a[i].t1); 47 } 48 } 49 } 50 printf("%d\n",ans); 51 return 0; 52 }?
轉(zhuǎn)載于:https://www.cnblogs.com/SilverNebula/p/6639887.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Bzoj1029 [JSOI2007]建筑抢修的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Web Hacking 101 中文版
- 下一篇: gradle idea java ssm