一本通传送门就是 这题 代码 #include<bits/stdc++.h> using namespace std; long long n,m,hash[10000001],s; struct Node{ long long t,w; }a[10000001]; bool cmp(Node o,Node p){ if(o.w<=p.w) return false; return true; } inline int read(){ int k=0; char ch=getchar(); while(!isdigit(ch)){ ch=getchar(); } while(isdigit(ch)){ k=(k<<1)+(k<<3)+(ch^48); ch=getchar(); } return k; } int main(){ n=read(); for(int i=1;i<=n;i++){ a[i].t=read(); a[i].w=read(); } sort(a+1,a+1+n,cmp); long long dll=-1,l=0; for(int i=1;i<=n;i++){ l=0; if(a[i].t<dll) continue; for(int j=a[i].t;j>=1;j--){ if(!hash[j]){ hash[j]=1; s+=a[i].w; l=1; break; } } if(!l) dll=a[i].t; } cout<<s<<endl; return 0; }