原题:
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),只能通过