#include<bits/stdc++.h> using namespace std; struct node{ int date; int k; }; bool cmp(int x,int y){ return x>y; } int main(){ int n; while(cin>>n){ node z[n+5]; int minx=-1; for(int i=1;i<=n;++i){ scanf("%d",&z[i].date); minx=max(minx,z[i].date); } for(int i=1;i<=n;++i) scanf("%d",&z[i].k); vector<int>v[1005]; int sum=0; for(int i=1;i<=n;++i){ sum+=z[i].k; v[z[i].date].push_back(z[i].k); } for(int i=1;i<=minx;i++){ if(v[i].size()!=0) sort(v[i].begin(),v[i].end(),cmp); } for(int i=1;i<=minx;i++){ int d=-1,len,p=0; if(v[i].size()!=0)len=i+v[i].size()-1; else len=minx; for(int m=i;m<=len;++m){ if(v[m].size()!=0){ if(d<v[m][0]){ d=v[m][0]; p=m; } } } if(p!=0){ sum-=v[p][0]; v[p].erase(v[p].begin()); } } cout<<sum<<endl; } } |
Double click to view unformatted code.