codevs1053

题目地址:http://codevs.cn/problem/1052/

分析:

动态规划

代码:

var f,que,p:array[0..100]of longint;
    t:array[1..100]of longint;
    maxtime,mintime,i,j,n,pre,cur:longint;
    flag:array[1..100]of boolean;
procedure qsort(h,ta:longint);
var ii,jj,mid,k:longint;
begin
    ii:=h;
    jj:=ta;
    mid:=t[(h+ta) div 2];
    repeat
         while t[ii]<mid do inc(ii);
         while t[jj]>mid do dec(jj);
         if ii<=jj then begin
             k:=t[ii];
             t[ii]:=t[jj];
             t[jj]:=k;
             k:=p[ii];
             p[ii]:=p[jj];
             p[jj]:=k;
             inc(ii);
             dec(jj);
         end;
    until ii>jj;
    if h < jj then qsort(h,jj);
    if ii < ta then qsort(ii,ta);
end;

begin
    readln(n);
    for i := 1 to n do read(t[i]);
    for i := 1 to n do read(p[i]);
    qsort(1,n);
    maxtime:=t[n];
    mintime:=t[1];
    fillchar(flag,sizeof(flag),true);
    for i := maxtime downto 1 do begin
        pre:=0;
        cur:=0;
        for j := 1 to n do if (t[j]>=i)and(flag[j]=true) then begin
            inc(pre);
            que[pre]:=j;
        end;
        for j := 1 to pre do if p[que[j]]>p[cur] then cur:=que[j];
            if cur <> 0 then begin
            flag[cur]:=false;
            f[i]:=f[i]+p[cur];
        end;
        f[i-1]:=f[i];
    end;
    writeln(f[1]);
end.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值