0
点赞
收藏
分享

微信扫一扫

[BFS]小猫爬山

def dfs(u,k):
    global minnum
    if k>minnum:#剪枝,当前大循环小车数大于之前完整的大循环后得到的最小小车数时结束循环
        return
    if u==n:#满足全部小猫都坐上小车的要求
        minnum=k
        return
    for i in range(k):#目前创建了k-1的小车,遍历每个小车
        if sum[i]+c[u]<=w:#看是否有小车还能继续坐人
            sum[i]+=c[u]
            dfs(u+1,k)
            sum[i]-=c[u]# for循环中有多个小车可以坐下此人时,保证此人不会同时坐多辆车
    sum[k]=c[u]#不能就创建第k个小车
    dfs(u+1,k+1)

n,w=map(int,input().split())
c=[int(input()) for i in range(n)]
sum=[0]*n
minnum=float('inf')
dfs(0,0)
print(minnum)
举报

相关推荐

算法刷题-小猫爬山

B - 爬山

爬山算法介绍

爬山算法优点

爬山算法详细介绍

纸牌游戏-小猫钓鱼

0 条评论