CS大战

来源:互联网 发布:html源码怎么用 编辑:程序博客网 时间:2024/04/30 15:58

【题目描述】
暑假开始了,信息学小组的同学都很兴奋,不仅因为暑假可以有整段的时间用来学习信息学,还因为信息学小组会在暑假举办一场真人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.
3 0
原创粉丝点击