【题目描述】
暑假开始了,信息学小组的同学都很兴奋,不仅因为暑假可以有整段的时间用来学习信息学,还因为信息学小组会在暑假举办一场真人CS大赛。
我们的游戏当然比较具有挑战力,为了能够让孩子们能够放松一下,兼代小小的抒发一下对辅导老师的热爱之情。所以在CS大战之前,老师总会和学生们做一个小小的“较量”,作为学生们开始比赛的开场。在这个环节中只有老师是“警察”,而所有的信息学队员都是“匪”。当然,老师自然为了能够准备好比赛,已经把自己练成了神射手,而且每射击一枪,总会花费1秒钟,而且百发百中,“枪枪爆头”。
当然,一个老师面对这么多的同学们,自然有些困难。所以,在这个环节中,我们都对老师有一定照顾,就是:只有老师有枪,而学生们没有,而且学生必须从老师面前的唯一一条通道逃跑(好惨啊)。当然,如果学生们一个一个跳出来都会被老师挨个干掉(因为老师是神枪手嘛)。所以,孩子们为了能够还有幸存者能够“生还”。准备同时出现在老师面前。以求能够有些侥幸逃跑出来的……
而每个学生通过通道的时间不同(跑的不一样快嘛)。而且,老师给每一个学生都赋予了一个期望值(期望干掉他的值,当然肯定是根据平时每个人的表现决定的)。老师通过平时对学生的了解,事先计算出了,每个学生在通道里待的时间(以秒为单位)和每个学生的期望值。但是,老师还是给了你一个可以不参加这个游戏的机会,就是,你需要根据老师提供给你的这些数据,计算出老师能够射得的最大期望值。好了,开始了,如果不想被“爆头”,就开始行动吧。
【输入格式】
输入数据第一行是一个整数n(n <= 1000),代表有n个学生要参加游戏。第二行是n个正整数,代表每个学生在通道里待的时间(两个数间用1个空格隔开);第三行,也有n个整数,代表对应第二行每个学生老师给他们赋予的期望值x( x < 1000)。
【输出格式】
输出中只包含一个数据,即老师可以射得的最大期望值。
【样例输入】
5
1 2 5 3 3
2 3 2 4 3
【样例输出】
12
【分析】
贪心,依次枚举希望值大的学生,能打就打。
var
t,f:array[0..1001]of longint;
i,j,n,fi,h,p,s:longint;
begin
readln(n);
for i:=1 to n do read(t[i]);
for i:=1 to n do read(f[i]);
h:=-1;
for i:=1 to n do
if h<t[i] then h:=t[i];
s:=0;
for j:=h downto 1 do //如果写for j:=1 to h do会错呦
begin
fi:=-maxlongint;
for i:=1 to n do
if (f[i]>fi)and(t[i]>=j) then
begin
fi:=f[i];
p:=i;
end;
s:=s+f[p];
f[p]:=0;
end;
write(s);
end.