想问一个关于Python的问题:
我使用def函数
x = 可送的外卖
y = 客人预订的外卖
def(x, y)
例如今天接受了客人的预订有 10 7 6 6
如果餐厅可送16份 刚好10+6=16
如果餐厅可送8份 只有7
就类似这个道理 如何算出使餐厅利益最大化的函数啊 只能使用combination函数吗
可不可以使用for in或者while的函数来设置函数
想问一个关于Python的问题:
我使用def函数
x = 可送的外卖
y = 客人预订的外卖
def(x, y)
例如今天接受了客人的预订有 10 7 6 6
如果餐厅可送16份 刚好10+6=16
如果餐厅可送8份 只有7
就类似这个道理 如何算出使餐厅利益最大化的函数啊 只能使用combination函数吗
可不可以使用for in或者while的函数来设置函数
你是问编程思路吗,这是一个典型的01背包问题呀
# -*- coding: utf-8 -*-
"""
Created on Mon Sep 14 22:02:39 2020
@author: Lenovo
"""
# 01 背包问题
# y 既看作重量,又看做价值
# x 看作是背包的容量
import numpy as np
y=[10,7,6,6]
x=16
def solver(x,y):
weight=x
value=np.zeros((len(y),),dtype=np.int) #初始化value数组,这里value和y的值一样
w=np.zeros((len(y)+1,x+1),dtype=np.int) #初始化进行动态规划的数组,因为需要得出是拿了哪些物品,所以选用二维数组
for i in range(len(y)):
value[i]=y[i]
#下面是最重要的代码,注意 w 数组的维数,物品的个数+1,背包重量+1
for i in range(len(y)):
j=1
while(j<=x):
if(j<y[i]):
w[i+1][j]=w[i][j]
else:
w[i+1][j]=max(w[i][j],w[i][j-y[i]]+value[i])
j=j+1
print('最优的value是: %d' % w[len(y)][x])
judge=np.zeros((len(y),),dtype=np.int) # judge是判断数组,判断每个物品是否被拿了,
# 我们可以发现,如果第j个物品没有被拿走,则有 w[j][x]==w[j-1][x],从而judge[j-1]=0
# judge=0,表示未拿 judge=1,表示拿了
j=len(y)
while(j>1):
if(w[j][x]==w[j-1][x]):
judge[j-1]=0
else:
judge[j-1]=1
x=x-y[j]
j=j-1
print(w)
if w[1][weight]>0:
judge[0]=1
else :
judge[0]=0
#单独判断第一个物品有没有被拿
for i in range(len(y)):
if(judge[i]==1):
print('给第%d个客人送外卖' % (i+1))
solver(x,y)
# 如果不需要知道是拿走了那些物品,则可以只使用一维数组
def easy_solver(x,y):
value=np.zeros((len(y),),dtype=np.int)
w=np.zeros((x+1,),dtype=np.int)
for i in range(len(y)):
value[i]=y[i]
for i in range(1,len(y)+1):
j=x;
while(j>=y[i-1]):
w[j]=max(w[j],w[j-y[i-1]]+value[i-1])
j=j-1
print('最优的value是: %d' % w[x])
easy_solver(x,y)
如果帮到你解决问题,麻烦点一下采纳