0-1 knapsack

作者: carlclone | 来源:发表于2019-07-02 13:32 被阅读0次

递归 注释记忆化搜索

10背包

测试用例 背包大小5

10背包

耗时

10背包

添加记忆化搜索

10背包 10背包
package main

import (
    "fmt"
    "time"
)

func findbv(remainpack int,putted map[int]bool,curv int,kv [][]int,memo map[int]int) int{
    max:=curv
    for k,v:=range kv {
        if _,ok:=memo[remainpack];ok {
            if memo[remainpack]>max {
                fmt.Println("hit")
                max=memo[remainpack]
            }
        } else
        if remainpack-v[0]>=0 && putted[k]!=true {
            putted[k]=true
            a:=findbv(remainpack-v[0],putted,curv+v[1],kv,memo)
            putted[k]=false
            if max<a {
                max=a
            }
        }
    }
    memo[remainpack]=max
    return max
}

func main() {
    kv:=[][]int{
        {1,6},{2,10},{3,12},{5,6},{7,8},{9,33},{11,560},{1,6},
        {5,6},{7,8},{9,33},{11,560},{1,6},
        {5,6},{7,8},{9,33},{11,560},{1,6},
        {5,6},{7,8},{9,33},{11,560},{1,6},
        {5,6},{7,8},{9,33},{11,560},{1,6},
        {5,6},{7,8},{9,33},{11,560},{1,6},
        {5,6},{7,8},{9,33},{11,560},{1,6},
    }
    //kv=[][]int{
    //  {1,6},{2,10},{3,12},{5,23},
    //}
    start := time.Now()
    r:=findbv(13,make(map[int]bool),0,kv,make(map[int]int))
    //some func or operation
    cost := time.Since(start)
    fmt.Printf("cost=[%s]",cost)
    fmt.Println(r)
}
example :[w,v] [1,6] [2,10] [3,12]    pack: 5


greedy algorithm 近似最优

put bigger v/w into pack first until overflow


recusive + memorization   


findBiggestV(remainPack , putted,currV)


iterate all remainkvpair
    if memo[remainpack]
        return memo[remainpack]
    if remainpack-k>=0 && !putted
        putted[k]=true
        tmpc = currV+v
        currV = max(findBiggest(remainPack-k,tmpc) ,currV)

memo[remainpack]=currv
return currV


dynamic programming


相关文章

  • 0-1 knapsack

    递归 注释记忆化搜索 测试用例 背包大小5 耗时 添加记忆化搜索

  • LeetCode 0-1 Knapsack 背包问题&相

    关于我的 Leetcode 题目解答,代码前往 Github:https://github.com/chenxia...

  • knapsack

    本文源于背包九讲,主要讲述最为基本的三种背包问题,并分析彼此之间的联系,最终找到一个“通用”的思维方式。首先会给出...

  • 动态规划法(四)0-1背包问题(0-1 Knapsack Pro

      继续讲故事~~  转眼我们的主人公丁丁就要离开自己的家乡,去大城市见世面了。这天晚上,妈妈正在耐心地帮丁丁收拾...

  • 11.6

    Multiple knapsack problem Contents 1.problem introduction...

  • 动态规划中阶

    Question 1 Unbounded Knapsack! (无限背包) Given a set of 'n' ...

  • 01背包

    public class Knapsack_01 {public static int getBiggestVal...

  • Dynamic Programming -- Knapsack

    这是一道经典的dp问题。 问题描述:有一些货物,他们有自己的重量和价值,一艘船有最大载重量,要求给定货物和船的载重...

  • 【早安心语】

    【2020-6-3】 早安 春夏秋冬 He who carries his knapsack on his ba...

  • 【优化算法】变邻域搜索算法解决0-1背包问题(Knapsack

    01 前言 经过小编这几天冒着挂科的风险,日日修炼,终于赶在考试周中又给大家更新了一篇干货文章。关于用变邻域搜索解...

网友评论

    本文标题:0-1 knapsack

    本文链接:https://www.haomeiwen.com/subject/soezcctx.html