现在的位置: 首页 > 综合 > 正文

poj3616

2018年04月26日 ⁄ 综合 ⁄ 共 696字 ⁄ 字号 评论关闭

【题意】

有头牛产奶n小时(n<=1000000),但必须在m个时间段内取奶,给定每个时间段的起始时间和结束时间以及取奶质量

且两次取奶之间须间隔r-1个小时,求最大取奶质量

【输入】

第一行n,m,r

接下来m行每行三个数字表示时间段的起始时间和结束时间以及取奶质量

【输出】

输出一个数字,表示最大取奶质量

dp

唯一需要注意的就是题目描述有问题,不是两次取奶需要间隔r小时而是r-1小时

比如说7分钟挤奶完毕,r=2,那么9分钟便可以开始挤奶

program poj3616;
var
  n,m,r,i,j,k,s,e,p:longint;
  f,root:array [0..1000001] of longint;
  next,point,cost:array [0..1001] of longint;

function quick (now:longint):longint;
begin
  if now<=0 then exit(0)
            else exit(f[now]);
end;

begin
  read(n,m,r);
  for i:=1 to m do
    begin
      read(s,e,p);
      inc(s);
      inc(e);
      point[i]:=s;
      cost[i]:=p;
      next[i]:=root[e];
      root[e]:=i;
    end;
  inc(n);
  for i:=1 to n do
    begin
      f[i]:=f[i-1];
      k:=root[i];
      while k<>0 do
        begin
          if quick(point[k]-r)+cost[k]>f[i] then f[i]:=quick(point[k]-r)+cost[k];
          k:=next[k];
        end;
    end;
  writeln(f[n]);
end.
【上篇】
【下篇】

抱歉!评论已关闭.