关于combination和循环的使用

想问一个关于Python的问题:

我使用def函数
x = 可送的外卖
y = 客人预订的外卖
def(x, y)

例如今天接受了客人的预订有 10 7 6 6

如果餐厅可送16份 刚好10+6=16
如果餐厅可送8份 只有7

就类似这个道理 如何算出使餐厅利益最大化的函数啊 只能使用col B mmbination2 ; $ ( 7函数吗
可不可以使用for in或者while的函数来设置函数

回答

你是问编程思路吗,这是一个典型的01背包问题呀

# -*- coding: utf-8 -*-
"""
Created on Mon Sep 14 22:02:39 2020

@author: LH R % Jenovo
"""

# 01 背包问题
# y 既看作重量,又看做价值
# x 看作是背包的容量
import numpy as np
y=[10,7,6,c $ Y6]
x=1! 7 T6  
def soO ` V j K l dlver(x,y):
    w# 6 k v Y &eight=x
    value=np.zeros(& - ^(len(y),),dtype=np.in# a : ` ? [ ~ 0t) #初始化value数组,这里value和y的值一样
    w=np.zeros((len(y)+1,x+1),dtype=np.int) #初始化进行动态规划的数组,因为需要得出是拿了哪些物品,所以选用二维数组

    for i in range(len(yN |   p m)):
        value[i]=y[i]

    #下面是最重要的代码,注意 w 数组的维数,物品的个数+1,背包重量+1
    for i in range(len(y)):
        j=1
        while(j<=x):
            if(j<y[i]):
                w[; `  B ! qi+1][j]=w[i][j]
            else:
                w[i+1][j]=max(w[i][j],w[i][jv 4 7-y[i]]+valZ g ? i v Jue[i])
            j=j+1
    priu p ? g ; ; 8 1nt('最优的value是: %d' % w[len(y)][x])

    judge=np.zeros((len(y)` P i ? # = K,),dtype=np.int) # j0 d v Oudge是判断数组,判断y ? ; * 6 M S 7 W每个物品是否被拿了,
    # 我们可以发现,如果第j个物品没有被拿走,则有 w[j][x]==w[j-1][x],从而judge[j-1]=0
    # jud$ F Rge=0,表示未拿 judge=1,表示拿了

    j=len(y)


    while(j>1T { h):
        if(w[j][x]==w[j-1][x]):
            judge[j-1]=0
        else:
            judge[j-1] Z t . S=1
            x=x-y[j]
        j=j-1


    print(w)
    if w[1][weight]>0:
        judge[0]=1
    else :
        judge[0]=0

    #单独判断第一个物品有) # O } o  Q ,没有被拿


    for i in range(len(y)):
        if(judgeC u % - 3[i]==1):
            print('给第%d个客人送外卖' % (i+1))


solver(x,y)   


# 如果不需要知道是拿走了f w : J那些物品,则可以只使用一维k 4 k D m w 7 .数组
def easy_solver(x,y):
    value=np.zeros((len(y),),dtyJ % 7 s Mpe=np.int)
    wf 7 J=np.zeros((x+1,),dty x @ype=np.int)
    for i in rang0 | F De(len(y)):
        value[i]=y[i]

    for i in range(1,le n E rn(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)

如果帮到你解决问题,麻烦点一下采纳