2017.2.11【初中部 GDKOI】模拟赛B组 软件公司(company) 题解

该博客介绍了如何运用二分搜索算法解决一个关于软件公司完成两个项目的时间优化问题。通过分析样例和数据范围,博主提出通过动态规划优化问题,最终将时间复杂度降低至O(n*m^2*log(10000)),并讨论了在遇到寻找最小最大值或最大最小值问题时二分搜索的应用场景。

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

原题:

http://172.16.0.132/senior/#contest/show/1920/1

题目描述:

一家软件开发公司有两个项目,并且这两个项目都由相同数量的m个子项目组成,对于同一个项目,每个子项目都是相互独立且工作量相当的,并且一个项目必须在m个子项目全部完成后才算整个项目完成。
这家公司有n名程序员分配给这两个项目,每个子项目必须由一名程序员一次完成,多名程序员可以同时做同一个项目中的不同子项目。
求最小的时间T使得公司能在T时间内完成两个项目。

输入:

第一行两个正整数n,m(1<=n<=100,1<=m<=100)。
接下来n行,每行包含两个整数,x和y。分别表示每个程序员完成第一个项目的子程序的时间,和完成第二个项目子程序的时间。每个子程序耗时也不超过100。

输出:

输出最小的时间T。

样例输入:

3 20
1 1
2 4
1 6

样例输出:

18

样例解释:

第一个人做18个2项目,耗时18;第二个人做2个1项目,2个2项目耗时12;第三个人做18个1项目,耗时18。

数据范围限制:

对于30%的数据,n<=30.
对于60%的数据,n<=60.

分析:

普通的动态规划应该比较容易发现。
f[i][j][k]表示前i个人,完成了j个1项目,k个2项目。转移为:
f[i][j][k]=max{f[i][j-s][k-t],s*A[i]+t*B[i]},不过一算复杂度O(n*m^4),只能通过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值