【发布时间】:2020-05-28 23:33:29
【问题描述】:
任务是在正方形中找到最小数量的矩形切割。我为此编写了一个递归函数,但重点是使用动态编程来编写它。我在纸上写了矩阵,但仍然觉得很难写代码。这里 a 和 b 是矩形的尺寸:
int minimalNumOfCuts(int a, int b)
{
if (a==b) return 0;
int result;
if (a<b)
result = 1+minimalNumOfCuts(b-a,a);//found a square with side a, so I add 1 and recurs on
else result = 1+minimalNumOfCuts(a-b,b);//found a square with side b
return result;
}
例如,对于 3x5 矩形,该函数应返回 3,这是获得一个边为 3 的正方形、一个边为 2 的正方形和两个边为 1 的正方形所需的最小切割数。
当我解决子问题(较小的矩形)时,我认为(如果我使用动态编程)矩阵应该是这样的。不需要带零的列和行。
【问题讨论】:
-
请详细说明问题,并使用有意义的变量名,以便我们理解您的代码
-
什么是“动态规划”
-
@pm100,从标签
Dynamic programming is an algorithmic technique for efficiently solving problems with a recursive structure containing many overlapping subproblems的描述来看,OP 可能需要一种递归方法,尽管还不太清楚。 -
标签文本对我来说读起来像 bs,OP 代码是递归的
-
@pm100,哈哈,因为你没有给我加标签,我差点错过了你的精彩评论,那将是一种耻辱。我不得不同意你的评价。
标签: c dynamic-programming