【发布时间】:2020-12-12 08:18:25
【问题描述】:
我正在尝试解决 GeeksforGeeks 上的 0/1 背包问题,它需要我完成功能
int knapSack(int W, int wt[], int val[], int n)
现在我想用递归+记忆来做到这一点。但是为此我需要为每个测试用例定义和初始化一个 DP 矩阵。看起来像这样。
int dp[1001][1001];
memset(dp,-1,sizeof(dp));
现在我能想到的是全局定义矩阵并在函数内部使用 memset,但问题是 memset 会在每次递归调用时重置矩阵。有没有办法绕过它? 还是我只需要使用制表法?
【问题讨论】:
-
你为什么使用
1001?你认为memset和-1会做什么?我建议阅读good book 而不是这个完全不专业的网站。 -
memset 用 -1 初始化矩阵,由于限制,我使用 1001
-
然后
memset(dp, -2, ...)会用-2初始化它吗? -
没有 memset 只能取 0 或 -1,因为我听说过
-
抱歉,但是这种方法在很多方面都被破坏了,因此需要很长的答案来解释一个好的解决方案可能是什么样子。以 GeeksForGeeksish 风格做这件事只是浪费时间。他们教的所有
(int W, int wt[])、dp[1001][1001]和memset都与专业的C++ 编程无关。不要从一开始就养成坏习惯,也不要在 Geeks 上浪费时间。
标签: c++ dynamic-programming knapsack-problem