美文网首页
多米诺骨牌

多米诺骨牌

作者: 唐僧取经 | 来源:发表于2019-06-25 09:52 被阅读0次

    多米诺骨牌

    image.png

    结果:

    image.png

    分析过程:

    • 准备一个二维数组存储每个阶段的状态结果值
    • 将问题分解为前一个骨块和下一个骨块左右的关系
    • 找到递推关系

    result[0] = append(result[0], int64(math.Max(float64(result[0][i]+node.Rnext.L), float64(result[1][i]+node.Lnext.L))))

    result[1] = append(result[1], int64(math.Max(float64(result[0][i]+node.Rnext.R), float64(result[1][i]+node.Lnext.R))))

    golang代码:

    package main
    
    import (
        "fmt"
        "golang.guazi-corp.com/finance/lego/common/math"
    )
    
    type Node struct {
        L      int64
        R      int64
        Status int64
    }
    
    func dynamic(list []Node) int64 {
    
        //存储当前块的左右值和下一块的左边结果,右边结果中间值
    
        result := [2][]int64{{0}, {0}}
    
        for i := 0; i < len(list)-1; i++ {
            node := list[i]
            next := list[i+1]
    
            result[0] = append(result[0], int64(math.Max(float64(result[0][i]+node.R*next.L), float64(result[1][i]+node.L*next.L))))
    
            result[1] = append(result[1], int64(math.Max(float64(result[0][i]+node.R*next.R), float64(result[1][i]+node.L*next.R))))
    
        }
    
        sum := int64(0)
        if result[0][len(result[0])-1] >= result[1][len(result[1])-1] {
            sum = result[0][len(result[0])-1]
        } else {
            sum = result[1][len(result[1])-1]
        }
    
        for i := 1; i < len(result[0]); i++ {
            if result[0][i] > result[1][i] {
                list[i].Status = 1
            }
        }
    
        return sum
    
    }
    
    func main() {
    
        list := []Node{
            {5, 8, 0},
            {4, 2, 0},
            {9, 6, 0},
            {7, 7, 0},
            {3, 9, 0},
            {11, 10, 0},
        }
    
        sum := dynamic(list)
        fmt.Println("sum=", sum)
        fmt.Println(list)
    
    }
    
    
    

    相关文章

      网友评论

          本文标题:多米诺骨牌

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