10 背包

递归 注释记忆化搜索

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
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!