java加权区间调度_带权重的区间调度问题——动态规划

问题阐述

给定若干个工作的开始时间、结束时间和权重(可以理解成重要程度),求出能完成的最大的工作权重(尽可能地完成更重要的工作),当然必须满足各个工作相容。如以下三个工作:

开始时间    结束时间    权重

工作1           0               3              4

工作2           5               6              5

工作3           2               8             10

由不带权重的区间调度方法,依次结束时间最早且相容的工作,这里就选出{1, 2},能实现的最大权重是4+5=9。而显而易见,选择{3}权重可达到10,因此最早结束时间的贪心策略在带权重的区间调度问题里已不适用。

分析

3a1d5cecfbe5

各工作开始与结束时间

给出上图所示8个工作的开始结束时间,按结束时间升序排序(区间调度问题一般都会先按结束时间升序排序)。 数据说明如下:

工作数目n

声明结构体数组存储工作的开始、结束时间和权值

struct JOB{

int s, e, v;

JOB(int s=0, int e=0, int v=0):s(s), e(e), v(v){}

}job[maxn];

dp[n],dp[i]表示对前1个工作考虑结束后所能达到的最大权值

frt[n],frt[i]表示序列中前一与之相容的最大工作

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值