poj3616

本文探讨了一种解决在特定时间间隔约束下最大化取奶质量的方法,涉及了动态规划算法的应用,详细解释了如何通过算法优化取奶过程,确保在不同时间段内高效获取最大奶量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【题意】

有头牛产奶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.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值