zoukankan      html  css  js  c++  java
  • python | 动态规划

    # encoding: utf-8
    #题目是:在arr中选出一堆数字,选出的数字不能是与它相邻的,然后使得选出的数字之和最大
    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]
    		B = rec_opt(arr,i-1)
    
    	return max(A,B)
    
    #非递归写法
    def dp_opt(arr):
    	opt = np.zeros(len(arr))
    	#创建一个数组大小等于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]
    if __name__ == "__main__":
    
    	print(rec_opt(arr,6))
    	print(dp_opt(arr))

    这里是对注释中的问题的解答,谢谢pyf师傅嗷~~

    #encoding=utf-8
    #题目要求:在一堆数找是否存在2个数使它们之和等于S
    import numpy as np
    arr=[3,34,4,12,5,2]
    
    #递归写法
    def rec_subset(arr,i,s):
        if s==0:
            return True
        elif i==0:
            return (arr[0] == s)
        elif arr[i]>s:
            return rec_subset(arr,i-1,s)
        else:
            A = rec_subset(arr,i - 1,s-arr[i])
            B = rec_subset(arr, i - 1,s)
            return A or B
    
    #非递归写法(打表)
    def dp_subset(arr,S):
        subset = np.zeros((len(arr),S+1),dtype=bool)  #生成一个二维数组,并且类型都是bool,初始化为0
        subset[:,0] = True
        subset[0,:] =False
        subset[0,arr[0]] = True
        for i in range(1,len(arr)):
            for s in range(1,S+1):
                if arr[i] > s:
                    subset[i,s] = subset[i-1,s]
                else:
                    A = subset[i-1,s-arr[i]]
                    B = subset[i-1,s]
                    subset[i,s] = A or B
        r,c = subset.shape
        return  subset[r-1,c-1]
    if __name__ == '__main__' :
        print(dp_subset(arr,9))
        print(rec_subset(arr,len(arr)-1,13))

  • 相关阅读:
    asp.net项目发布网上-当前自定义错误设置禁止远程查看应用程序
    TortoiseSVN提交文件的时候卡死
    TortoiseSVN,排除不想提交文件的方法(转)
    VS2010 发布网站时文件丢失
    SQL SERVER2012秘钥
    QTP常用功能
    XAMPP和Bugfree详细教程
    模块
    匿名函数、函数递归与二分法、面向过程
    迭代器、生成式、生成器
  • 原文地址:https://www.cnblogs.com/chrysanthemum/p/11802264.html
Copyright © 2011-2022 走看看