给定一根长度为N米的杆,则杆只能切割成3种尺寸A , B和C。任务是使杆上的切割次数最大化。如果无法进行切割,请打印-1 。
例子:
Input: N = 17, A = 10, B = 11, C = 3
Output: 3
Explanation:
The maximum cut can be obtain after making 2 cut of length 3 and one cut of length 11.
Input: N = 10, A = 9, B = 7, C = 11
Output: -1
Explanation:
It is impossible to make any cut so output will be -1.
天真的方法:
- 让我们假设分别切割大小为A,B和C的杆的x,y和z数。这可以写成线性方程:x * A + y * B + z * C = N
- 现在,只需迭代x和y的所有可能值,并使用(N – x * A + y * B)/ c计算z。
- 如果x * A + y * B + z * C = N,则为可能的答案之一。
- 最后计算x + y + z的最大值。
时间复杂度: O(N 2 )
辅助空间: O(1)
高效方法:可以使用动态编程解决问题。
- 创建一个大小为N的dp []数组,并将所有值初始化为INT_MIN 。
- 设置dp [0] = 0,因为这将是我们方法的基本情况。
- 从1到N进行迭代,并检查是否有可能进行任意长度的切割,即A,B和C,并将dp [i]更新为所有最小值。