设为首页 加入收藏

TOP

一道题看清动态规划的前世今生 ( 二 )(二)
2017-12-07 14:22:18 】 浏览:465
Tags:一道 看清 动态 规划 今生
s + w[idx], W, memo) + v[idx]) return memo[idx][s] def solve(self, w, v, W): n = len(w) memo = [[-1 for i in range(W + 1)] for j in range(n)] return self.search(0, w, v, n, 0, W, memo)

这就是dp了,我们把它改一下,改成递推形式的就是我们经常写的dp了

递推式记忆化搜索(dp)

java

public int solve(int[] w, int[] v, int W) {
    int n = w.length;
    int[][] dp = new int[n + 1][W + 1];
    for (int i = 0; i < n; i++) {
        for (int j = 0; j <= W; j++) {
            if (j < w[i]) {
                dp[i + 1][j] = dp[i][j];
            } else {
                dp[i + 1][j] = Math.max(dp[i][j], dp[i][j - w[i]] + v[i]);
            }
        }
    }
    return dp[n][W];
}

python

def solve(self, w, v, W):
    n = len(w)
    dp = [[0 for i in range(W + 1)] for j in range(n + 1)]
    for i in range(n):
        for j in range(W + 1):
            if j < w[i]:
                dp[i + 1][j] = dp[i][j]
            else:
                dp[i + 1][j] = max(dp[i][j], dp[i][j - w[i]] + v[i])
    return dp[n][W]

至于递推的顺序,从前到后还是从后到前,都是可以的,这个取决于个人的习惯!

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Spring、Spring Boot 和 TestNG .. 下一篇没有 redis 也能够支撑”小米在印..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目