1. 程式人生 > 實用技巧 >P1230 智力大沖浪

P1230 智力大沖浪

Miku

解提示思路一定要清醒,想好了再幹。

別直接下筆,有思路嗎,沒思路寫什麼

--scz

被這個題卡了1h 我還是太弱了

太弱了

思路本身好想,從後往前掃,能搞就幹,先玩最大,同時間扔一塊

\(\color{red}{但是我寫了啥}\)

#include<iostream>
#include<algorithm> 
#include<queue>
#include<cstdio>
using namespace std;
struct gam{
	int m;
	int t;
}g[1000000];
int m;
int now;
priority_queue <int>q;
int n;
int last;
int d;
int co;
int wor;
bool cmp(gam x,gam y){
	if(x.t==y.t)
	return x.m>y.m;
	return x.t<y.t;
}
int ans;
int main(){
	scanf("%d%d",&m,&n);
	for(int i=1;i<=n;++i){
		scanf("%d",&g[i].t);
	}
	for(int i=1;i<=n;++i){
		scanf("%d",&g[i].m);
		wor+=g[i].m;
	}
	sort(g+1,g+n+1,cmp);
	now=g[n].t;
	last=now;//上一個任務剩餘時間 
	for(int i=n;i>=1;--i){
		q.push(g[i].m);
		while(g[i].t==g[i-1].t){
			i--;
			q.push(g[i].m);
		}
		while(last>g[i-1].t&&last>0){
			if(!q.empty()){
			co+=q.top();
			q.pop();
			last--;
			}
			else{
				last=g[i-1].t;
				break;
			}
		}
	};
	cout<<m-wor+co;
	return 0;
}