zoukankan      html  css  js  c++  java
  • 动态规划 学习

    简介

    参考链接 https://space.bilibili.com/24014925/video?keyword=动态规划

    example

    选择不相邻的数字组成最大的数

    import numpy as np
    arr = [1, 2, 4, 1, 7, 8, 3]
    
    def rec_opt(arr, i): # 递归方式
        if i == 0:
            return arr[0]
        elif i == 1:
            return max(arr[0], arr[1])
        else:
            A = rec_opt(arr, i - 2) + arr[i] # 选中第i个值
            B = rec_opt(arr, i - 1) # 不选第i个值
            return max(A, B)
    
    def dp_opt(arr): # 非递归方式
        opt = np.zeros(len(arr))
        opt[0] = arr[0]
        opt[1] = max(arr[0], arr[1])
        for i in range(2, len(arr)):
            A = opt[i - 2] + arr[i]
            B = opt[i - 1]
            opt[i] = max(A, B)
        return opt[len(arr) - 1]
    
    print(rec_opt(arr, 6))
    print(dp_opt(arr))
    

    example 2

    如何查看字符串中选中的任意个数的数字是否可以加起来等于我想要的数字

    import numpy as np
    arr = [3, 34, 4, 12, 5, 2]
    
    def rec_opt(arr, i, s):
        if s == 0:
            return True
        elif i == 0:
            return arr[0] == s
        elif arr[i] > s:
            return rec_opt(arr, i-1, s)
        else:
            A = rec_opt(arr, i - 1, s - arr[i]) # 选中第i个值
            B = rec_opt(arr, i - 1, s) # 不选第i个值
            return A or B
    
    def dp_opt(arr, s):
        opt = np.zeros((len(arr), s+1) , dtype=bool)
        # print(opt)
        opt[:, 0] = True
        opt[0, :] = False
        opt[0, arr[0]] = True
        for i in range(1, len(arr)):
            for j in range(1, s+1):
                if arr[i] > j:
                    opt[i, j] = opt[i-1, j]
                else:
                    A = opt[ i - 1, j - arr[i]]
                    B = opt[ i - 1, j]
                    opt[i, j] = A or B
        r, c = opt.shape
        return opt[r-1, c -1]
    
    print(rec_opt(arr, len(arr) - 1, 6))
    print(dp_opt(arr, 13))
    

    Tips

    numpy 初始化二维数组

    Hope is a good thing,maybe the best of things,and no good thing ever dies.----------- Andy Dufresne
  • 相关阅读:
    JS中级二
    JS中级一
    JS入门八
    JS入门七
    JS入门六
    JS入门五
    JS入门四
    JS入门三
    JS入门二
    JS入门1
  • 原文地址:https://www.cnblogs.com/eat-too-much/p/13499409.html
Copyright © 2011-2022 走看看