Dynamic programming 动态规划的递推方程
我有一个非常类似于背包问题的情况,但我只想确认我的递推方程和背包问题是一样的 我们最多可投资万美元。我们有N种不同的投资,每种投资都有成本mi和利润gi。我们想找到利润最大化的递推方程 以下是我的答案:Dynamic programming 动态规划的递推方程,dynamic-programming,Dynamic Programming,我有一个非常类似于背包问题的情况,但我只想确认我的递推方程和背包问题是一样的 我们最多可投资万美元。我们有N种不同的投资,每种投资都有成本mi和利润gi。我们想找到利润最大化的递推方程 以下是我的答案: g(i,j) = max{g(i-1,j), g_i + (i-1,j-m_i)} if j-m_i >= 0 g(i-1,j) if j-m_i < 0 我希望我的解释清楚
g(i,j) = max{g(i-1,j), g_i + (i-1,j-m_i)} if j-m_i >= 0
g(i-1,j) if j-m_i < 0
我希望我的解释清楚
谢谢你,祝你今天愉快
鲍比,你的递推公式是正确的。该问题与传统的背包问题相同。实际上,您可以对空间复杂度进行一些优化。这是C++代码。< /P>
int dp[M + 10];
int DP{
memset(dp, 0, sizeof(dp));
for(int i = 0; i < N; ++i)
for(int j = M; j >= m[i]; --j) // pay attention
dp[j] = max(dp[j], dp[j - m[i]] + g[i]);
int ret = 0;
for(int i = 0; i <= M; ++i) ret = max(ret, dp[i]);
return ret;
}