用0-1背包问题解决一些奇奇怪怪的需求

前言

在工作中遇到了一个相当奇怪的要求。一开始,每个人自由组队完成任务,有些人超额完成,有些人未能完成,因此分数有多有少。为了能够尽可能多地减少工作量,需要重新分配队伍,实际上就是相互挂名,最后结算的时候抬过分数线。而有一个更奇怪的要求,就是组里面挂了名字之后,分数会被新来的平均分摊,多的人会变少,少的人会变多。

这下强度一下就上来了。

思考

整个过程很乱,但也没关系。我们一步步拆解。

拆解

既然难以思考,那就干脆拆成两个部分,分别是带约束减分(超额人员挂名)和带目标加分(未达标人员均摊)。

带约束减分这个过程也就可以看成一个0-1背包问题。

背包问题:

我现在有这么大的背包,然后有这么多东西,只能选择放入与不放入,那么能放多少。

现在这个问题:

现在部门有这么多的未达标人员,然后有这么多分数,只能选择挂名或不挂名,那么能挂多少。

简直太像了不是吗?

基本思路建模

既然这样,那我们就来试试建立一个数学模型。

对于人员 A A A,达标线为 s a s_a sa,超额完成后分数为 s 1 s_1 s1;如果本来只有他一个人,组内成员总数为 1 1 1,那么一个组可以获得的分数 s s s就全为个人所得;如果增加一个组员 B B B,则组内成员总数变为 2 2 2,那么 A A A 的分数变为:

s a ′ = s a − s 2 (1) s_a^{\prime}=s_a-\frac{s}{2}\tag{1} sa=sa2s(1)

同时,对于 B B B,本来只有 s b s_b sb,但是挂名后,分数变为:

s b ′ = s b + s 2 (1) s_b^{\prime}=s_b+\frac{s}{2}\tag{1} sb=sb+2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ordinary_brony

代码滞销,救救码农

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值