八成是写的代码不对,怎么改才能不报错啊
from sympy import symbols,solve
x=symbols('x')
y=symbols('y')
z=symbols('z')
12≥3x+4y+2y
print(solve(x,y,z>0)
from sympy import symbols,solve
x=symbols('x')
y=symbols('y')
z=symbols('z')
12≥3x+4y+2y
print(solve(x,y,z>0)
//头一次搞出了黑色背景的代码,爷青结www
这里用回溯法,就是嵌套循环呗
result=[]
for x1 in range(5):
for x2 in range(4):
for x3 in range(7):
if 3*x1+4*x2+2*x3<=12:
result.append((x1,x2,x3))
print(result)
结果:
[(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 0, 3), (0, 0, 4), (0, 0, 5), (0, 0, 6), (0, 1, 0), (0, 1, 1), (0, 1, 2), (0, 1, 3), (0, 1, 4), (0, 2, 0), (0, 2, 1), (0, 2, 2),
(0, 3, 0), (1, 0, 0), (1, 0, 1), (1, 0, 2), (1, 0, 3), (1, 0, 4), (1, 1, 0), (1, 1, 1), (1, 1, 2), (1, 2, 0), (2, 0, 0), (2, 0, 1), (2, 0, 2), (2, 0, 3), (2, 1, 0), (2, 1, 1), (3, 0, 0), (3, 0, 1), (4, 0, 0)]
正确用法
import sympy
x = sympy.symbols('x')
fz = (x-2) ** 2 + 4
fz_min_x = sympy.minimum(fz, x)
print(fz_min_x)
题目要求: 用回溯算法
from itertools import combinations_with_replacement as comb
def Solution(n, k=3):
# 数的选择范围在1-n
def backtrack(n,k,start,track):
if len(track) == k:
t = track.copy()
t = comb(t,3)
t = tuple(filter(lambda x:3*x[0]+4*x[1]+2*x[2]<=12,t))
res.extend(t)
return
# 注意i从start开始递增
for i in range(start, n+1):
# 做选择
track.append(i)
backtrack(n,k,i+1,track)
# 撤销选择
track.pop()
res = []
track = []
backtrack(n,k,0,track)
return set(res)
print(Solution(12)) #估算大致解的范围,定的太大,计算有点慢
好像还缺少解,再研究研究