之后要看的题

20111014

 

 SOFTWARE

一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块,由公司里的技术人员分工完成,每个技术人员完成同一软件的不同模块的所用的天数是相同的,并且是已知的,但完成不同软件的一个模块的时间是不同的,每个技术人员在同一时刻只能做一个模块,一个模块只能由一个人独立完成而不能由多人协同完成。一个技术人员在整个开发期内完成一个模块以后可以接着做任一软件的任一模块。写一个程序,求出公司最早能在什么时候交付软件。

这道题目是典型的二分答案加验证的算法,即给出一个答案,再验证这个答案是否可行。若可行,则在其左区间内继续二分,否则在它右边的区间内继续二分,直至区间长度为1,此时就得到我们所要的答案。二分的初始最小值为0,最大值max=(m*(max(w{[i,l]}+max{(w[i,2]})) div n+3.

下面就是如何进行可行性验证了。记当前二分的答案为mid,记f[i,j]表示前i个人在完成第一个软件j个模块时,最多完成的第二个软件的模块数。最后,我们只要看f[nm]是否大于等于m即可确定mid时间内是否能完成。

时间复杂度为O( NMlogc)

 

我的是f[i,j]:=max(f[i,j],f[i-1,k]+(mid-(j-k)*d1[i]) div d2[i]);

 

 

 

清理的题

车队过桥

 

转载于:https://www.cnblogs.com/ushiojamie/archive/2011/10/14/2212564.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值