给定一根长度为N米的杆,该杆只能切成 3 种尺寸A 、 B和C 。任务是最大化杆的切割次数。如果无法进行 cut 则打印-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.
天真的方法:
- 让我们假设分别切割了 x、y 和 z 个尺寸为 A、B 和 C 的杆。这可以写成一个线性方程: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]更新为所有的最小值。
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。