题目描述
小科刚刚参加完信息学竞赛,现在,他有很多作业要做。 每个老师都给了他交作业的最后期限。 如果小科在截止日期之后交作业,老师就会降低他最终考试的分数。 现在,我们假设每科作业都需要做一整天。 小科希望你帮助他安排家庭作业的顺序,以最大程度地减少分数的降低。
输入格式
第1行:一个正整数N(1<=N<=1000),表示作业的数量。
第2行:N个空格分隔的整数,第i个整数d_i,表示第i个作业的截止日期为d_i(1<= d_i <= N)。
第3行:N个空格分隔的整数,第i个整数s_i表示第i份作业如果没有按时提交,将会被扣除s_i (1<=s_i <= 100000)。
输出格式
1行:一个整数,表示小科可能被降低的分数的最小值。
输入输出样例
输入样例1:
3
3 3 3
10 5 1
输出样例1:
0
输入样例2:
3
1 3 1
6 2 3
输出样例2:
3
输入样例3:
7
1 4 6 4 2 4 3
3 2 1 7 6 5 4
输出样例3:
5
【耗时限制】1000ms 【内存限制】128MB
//
//Created by Carlgood.
//
#include<iostream>
#include<cmath>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<sstream>
using namespace std;
struct work
{
int wi;
int di;
}a[1010];
bool cmp(const work &x,const work &y)
{
return x.wi>y.wi;
}
bool flag[1010];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].di;
}
for(int i=1;i<=n;i++)
{
cin>>a[i].wi;
}
sort(a+1,a+n+1,cmp);
int ans=0;
for(int i=1;i<=n;i++)
{
bool ok=false;
for(int j=a[i].di;j>=1;j--)
{
if(flag[j]==false)
{
flag[j]=true;
ok=true;
break;
}
}
if(!ok) ans+=a[i].wi;
}
cout<<ans;
return 0;
}