拼图:仅在10或12的倍数上找到最小资源分配

时间:2014-05-25 08:53:09

标签: algorithm math

我有两种类型的笔记本,

  • 在第一个笔记本中,可以在一个页面中解决10个问题。
  • 在第二个笔记本中,可以在一页中解决12个问题。

对于给定的n个问题,我必须以这样的方式使用页面,使得两个笔记本都不会浪费任何空间。考虑到我也必须使用最少的页面。

输出应该返回解决所有问题所需的页数,如果不能通过它应该返回-1。

示例:

Problem count :  10

Output : 1 (one page from first notebook)

Problem Count :12

Output :1 (one page from second notebook)

Problem Count : 5

Output : -1 (Not possible)

Problem Count : 22

Output : 2(one from first notebook + one from second notebook)

Problem Count: 23

Output:-1(not possible)   

如何解决此问题,提前谢谢

1 个答案:

答案 0 :(得分:2)

让我们说问题的数量是2k。对于任何页面组合,它必须是均匀的。

然后你必须找到x和y这样

10x + 12y = 2k
5x + 6y = k
5(x + y) + y = k

你必须尽量减少x + y。设a = x + y然后,

5a + y = k
a >= y

这个问题的一个解决方案是

a' = floor(k / 5)
y' = k mod 5

该解决方案使y最小化,因此对于任何存在的解决方案,a' > = y'对于这个特定的解决方案

这种平等的一般解决方案是

a = a' - t
y = y' + 5t

从某种意义上说,y'借用一个' 最大化t将最小化a。

要解决:

a >= y
a' - t >= y' + 5t
a' - y' >= 6t

所以最大t是楼层((a' - y')/ 6) 而min a是一个' - t

恒定时间解决方案! :)

相关问题