正好是我做过的题嘻嘻
代码附上:
#include<bits/stdc++.h>
using namespace std;
int n,len,ans,heap[10005];
struct node{int p,d;}a[10005];
bool cmp(node x,node y){return x.d<y.d;}
void up(int p){
while(p>1){
if (heap[p]<heap[p/2]){swap(heap[p],heap[p/2]);p/=2;}
else break;
}
}
void down(int p){
int s=p*2;
while(s<=len){
if (s<len&&heap[s]>heap[s+1])++s;
if (heap[s]<heap[p]){swap(heap[s],heap[p]);p=s;s=p*2;}
else break;
}
}
void insert(int x){heap[++len]=x;up(len);}
void extract(){heap[1]=heap[len--];down(1);}
int main(){
while(scanf("%d",&n)!=EOF){
len=0;ans=0;memset(heap,0,sizeof (heap));
for(int i=1;i<=n;++i)scanf("%d%d",&a[i].p,&a[i].d);
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;++i){
if (a[i].d==len&&a[i].p>heap[1]){extract();insert(a[i].p);continue;}
else if (a[i].d>len)insert(a[i].p);
}
for(int i=1;i<=len;++i)ans+=heap[i];
printf("%d\n",ans);
}
return 0;
}看在我写了题解的份上,点个赞再走呗~



京公网安备 11010502036488号