学习Python从娃娃抓起!记录下蓝桥杯备考学习过程中的题目,记录每一个瞬间。
附上汇总贴:历年蓝桥杯Python青少组中/高级国赛省赛真题解析 | 汇总
【题目描述】
现有一个容器,其容量为v( 0 < v < 1001 0\lt v\lt 1001 0<v<1001,正整数),同时有n个物品( 0 < n ≤ 30 0\lt n\le 30 0<n≤30),每个物品体积大小不同(正整数)。
在n个物品中,任取若干个装入容器内,使容器的剩余空间最小。
【输入】
输入容器大小v( 0 < v < 1001 0\lt v\lt 1001 0<v<1001,正整数),输入物品数量n( 0 < n ≤ 30 0\lt n\le 30 0<n≤30),输入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