【Codechef Dec14. Course Selection】

该博客介绍了Codechef Dec14比赛中的一道关于课程选择的问题,涉及课程顺序限制和最大平均分求解。博主分析了问题不适合使用动态规划,而是通过网络流中的最小割方法来解决。他们阐述了如何构建网络图,包括课程之间的关系、分数计算和限制条件的处理,最后给出了问题的解决方案。
摘要由CSDN通过智能技术生成

题目描述

课业计划包含 N N N项课程,需要在 M M M个钟的某一个完成(每学期中可以完成若干个)。
K K K个限制,形如 ( A i , B i ) (A_i, B_i) (Ai,Bi),表示 A i A_i Ai需要比 B i B_i Bi先完成(不能在同一个学期)。
每门课在不同的学期会有不同的分数, X i , j X_{i, j} Xi,j表示第 i i i门课在第 j j j学期学的分数。若 X i , j = − 1 X_{i, j} = -1 Xi,j=1,则说明第 j j j个学期没有第 i i i门课。
求在学完所有课的情况下分数平均值得最大值。
链接在这里

分析

处理这种规划问题一般就是动态规划和网络流了(还有贪心)。这个题目明显不太能动归,没法转移,我们考虑网络流。
很容易会去想费用流的问题(也许只有我),因为如果没有先学后学的问题那么费用流一跑就出来了。但是后来应注意到费用流是比较难以处理冲突的。而最小割则经常可以使用流量无限的边表示冲突。所以我们考虑最小割。
那么应该是某个东西减去最小割为最大分数。所有我们初值应该是某个“总分”,最小割表示扔掉的分数。如果是用一门课所有学期的分数之和为初值减去最小割,这个看着就不太对。所以总分应该是每门学科的最大分值,换成别的则表示扣分。为了让每个学科的扣分只需选择一个,每门学科自己应当是一条链(串联);不同学科的扣分累加,那么不同学科应该是若干条链(并联)。
为了方便,可以对每个学科不统计其最大得分,而是用一个极大值作为初始值。本题中分数均小于 100 100 100,可以以 100 100 100为每门学科的初值。
于是初步的建图如下:
对于每个学科 i i i建立 m m

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值