声明:
0.感谢@正月点灯笼大神的DP教学视频 对于新手来说十分友好
1.代码为视频笔记 均由本人自行完成 稳定性与准确性未验证
2.转载附作者Id 及作品链接
代码如下:
一、报酬问题
schedule=(
[1 ,4 ,5 ],
[3 ,5 ,1 ],
[0 ,6 ,8 ],
[4 ,7 ,4 ],
[3 ,8 ,6 ],
[5 ,9 ,3 ],
[6 ,10,2 ],
[8 ,11,4 ],
)
lists=[]
for i in range(8):
front=None
for j in range(8):
if not schedule[j][1]>schedule[i][0]:
front=j
lists.append([i,front])
def optimum(item):
if item==None:
return 0
else:
try:
result=lists[item][2]
except:
result=None
if result:
return result
else:
pre_item=item-1
front_item=lists[item][1]
if pre_item<0:
return schedule[item][2]
else:
case_1=optimum(pre_item)
case_2=optimum(front_item)+schedule[item][2]
lists[item].append(max(case_1,case_2))
return max(case_1,case_2)
def maximum(time):
event=None
for i in range(8):
if schedule[i][1]<=time:
event=i
if event==None:
return 0
else:
return optimum(event)
time=200
pay=maximum(time)
print(lists)
print(pay)
二、强盗问题
def optimum(arr,num):
try:
result=arr[num][1]
except:
result=None
if result:
return result
else:
if num<1:
return arr[num][0]
elif num<2:
return max(arr[num][0],arr[num-1][0])
else:
case_1=optimum(arr,num-1)
case_2=optimum(arr,num-2)+arr[num][0]
arr[num].append(max(case_1,case_2))
return max(case_1,case_2)
if __name__ == "__main__":
array=[[1],[2],[4],[1],[-7],[8],[3],[9],[6],[2],[0],[7],[-5]]
maximum=optimum(array,len(array)-1)
print(maximum)
三、组成数问题
def tell_1(ran,_sum):
if _sum==0:
return True
if _sum<0:
return False
if ran==0:
return _sum==array[0]
case_1=tell_1(ran-1,_sum-array[ran])
case_2=tell_1(ran-1,_sum)
return case_1 or case_2
def tell_2(_range,summary):
memory=[[None for _ in range(summary+1)] for _ in range(_range+1)]
#二维数组
for i in range(_range+1):
for j in range(summary+1):
if i==0:
memory[i][j]=False
if j==0:
memory[i][j]=True
#初始化
memory[0][array[0]]=True
def search(mem,ran,_sum):
if _sum<0:
return False
else:
result=mem[ran][_sum]
if result==None:
case_1=search(mem,ran-1,_sum)
case_2=search(mem,ran-1,_sum-array[ran])
result=case_1 or case_2
mem[ran][_sum]=result
return result
return search(memory,_range,summary)
if __name__ == "__main__":
array=[400,12,54,29,6,141,9,0,10,21,24,102]
summary=400
#要求值
_range=len(array)-1
#查找范围
if_exist=tell_1(_range,summary)
print(if_exist)
if_exist=tell_2(_range,summary)
print(if_exist)
此栏目预测共享自学之乐,共勉求知之友,共塑网站和谐好学的形象。
欢迎大家在评论区发表合理的意见和指正。
如果觉得该栏目对您有帮助,望不吝点赞收藏。