# -*- coding: utf-8 -*-
"""
Spyder Editor
This is a temporary script file.
"""
bestV=0 #设置最好价值初始值为零
curW=0 #设置初始权重为零
curV=0 #设置初始权重价值为零
bestx=None #设置初始选择为零
def backtrack(i): #定义回溯算法
global bestV,curW,curV,x,bestx #纳入全局变量
if i>=n: #如果i大于等于6,判断是否有更好的,有就替换,写出选择结果
if bestV<curV:
bestV=curV
bestx=x[:]
else: #否则,判断是否可以容纳背包里
if curW+w[i]<=c:
x[i]=True
curW+=w[i]
curV+=v[i]
backtrack(i+1)
curW-=w[i]
curV-=v[i]
x[i]=False
backtrack(i+1)
if __name__=='__main__':
n=6
c=5
w=[5,3,2,2,3,1]
v=[800,200,600,700,400,100]
x=[False for i in range(n)] #设置初始值均为false
backtrack(0)
print(bestV)
print(bestx)
1400
[False, False, True, True, False, True]
problem2
#设置初始值
def backtrack(i):
for i in range(4):
for k in range(4):
print([i,k])
#print([i,i])
#print([i,i+1])
print()
if __name__=='__main__':
#input("请输入n")
#input("请输入k")
backtrack(5)
problem3:
from functools import reduce
#构造一个判断素数的函数
def sushu(n):
a=0
for k in range(2,n):
if n%k==0:
a+=1
if a==0:
return True
c=[1,3,5,7,9]
def chachao(x):
for i in range(10000,x): #没想到如何直接生成这样的五位数,所以遍历所有的五位数,用排除法
l=0
if sushu(i):
for j in str(i):
if (int(j) not in c): #判断 j 是否在五个数内,排除不是由这五个数组成的数
l+=1
if l==0:
b=[int(j) for j in str(i)] #但生成的数会有11357等这样重复的数字,仍不符合要求
if len(b)==len(set(b)): #用一个set函数,生成不重复数组,排除掉11357这样重复的数字
m=reduce(lambda x, y: x*10+y, b[1:4]) #生成剩下的三位数
if sushu(m):
print (i)
chachao(99999)
problem2
在这里插入代码片