历年蓝桥杯Python青少组中/高级国赛省赛真题解析 | 2020年6月省赛编程题(6)

学习Python从娃娃抓起!记录下蓝桥杯备考学习过程中的题目,记录每一个瞬间。
附上汇总贴:历年蓝桥杯Python青少组中/高级国赛省赛真题解析 | 汇总


【题目描述】

现有一个容器,其容量为v( 0 < v < 1001 0\lt v\lt 1001 0<v<1001,正整数),同时有n个物品( 0 < n ≤ 30 0\lt n\le 30 0<n30),每个物品体积大小不同(正整数)。

在n个物品中,任取若干个装入容器内,使容器的剩余空间最小。

【输入】

输入容器大小v( 0 < v < 1001 0\lt v\lt 1001 0<v<1001,正整数),输入物品数量n( 0 < n ≤ 30 0\lt n\le 30 0<n30),输入n个物品的不同大小(正整数)

【输出】

剩余最小空间值

【输入样例】

100
4
50
20
45
19

【输出样例】

5

【代码详解】

在这里插入图片描述

v = int(input())
n = int(input())
a = [0 for i in range(35)]
used = [0 for i in range(35)]
for i in range(1, n+1):
    a[i] = int(input())
maxn = 0
def dfs(step):
    global maxn
    if step>=n:
        ans = 0
        for i in range(1, n):
            ans += used[i] * a[i]
        if ans>v:
            return
        maxn = max(maxn, ans)
        return
    used[step] = 1
    dfs(step+1)
    used[step] = 0
    dfs(step+1)

dfs(1)
print(v-maxn)

【运行结果】

100
4
50
20
45
19
5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值