1 #include<cstdio>
2 using namespace std;
3 int n,a,b,c,ans;
4 int t[110],v[110],w[300];//t是出现时间,v是价值,w是堆。
5 bool f[3000];//标志数组。
6 void put(int x){
7 w[x]=a=x;
8 while(v[w[a]]>v[w[a/2]]&&a>1){
9 b=w[a];w[a]=w[a/2];w[a/2]=b;
10 a/=2;
11 }
12 }
13 int get(){
14 c=w[1],w[1]=w[n],w[n]=0,a=1,n--;
15 while(1){
16 b=v[w[a*2]];
17 if(v[w[a*2+1]]>b&&v[w[a*2+1]]>v[w[a]]){
18 b=w[a];w[a]=w[a*2+1];w[a*2+1]=b;
19 a=a*2+1;
20 }
21 else{
22 if(b>v[w[a]]){
23 b=w[a];w[a]=w[a*2];w[a*2]=b;
24 a=a*2;
25 }
26 else break;
27 }
28 }
29 return c;
30 }
31 int main(){
32 scanf("%d",&n);
33 for(int i=1;i<=n;i++) scanf("%d",&t[i]);
34 for(int i=1;i<=n;i++) scanf("%d",&v[i]);
35 for(int i=1;i<=n;i++) put(i);
36 while(n){
37 a=get();
38 for(int i=t[a];i>0;i--){
39 if(!f[i]){
40 f[i]=1;
41 ans+=v[a];
42 break;
43 }
44 }
45 }
46 printf("%d\n",ans);
47 return 0;
48 }