Dynamic programming 动态规划的递推方程

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 我希望我的解释清楚

我有一个非常类似于背包问题的情况,但我只想确认我的递推方程和背包问题是一样的

我们最多可投资万美元。我们有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
我希望我的解释清楚

谢谢你,祝你今天愉快


鲍比,你的递推公式是正确的。该问题与传统的背包问题相同。实际上,您可以对空间复杂度进行一些优化。这是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;
}