文章目录

Question

有一个箱子容量为 V,同时有 n 个物品,每个物品有一个体积(正整数)。

要求 n 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。

输入格式
第一行是一个整数 V,表示箱子容量。

第二行是一个整数 n,表示物品数。

接下来 n 行,每行一个正整数(不超过10000),分别表示这 n 个物品的各自体积。

输出格式
一个整数,表示箱子剩余空间。

数据范围
0<V≤20000,
0<n≤30
输入样例:
24
6
8
3
12
7
9
7
输出样例:
0

Ideas

从n个物品中选,将其放入箱子,让箱子剩余体积最小,也就是从n个箱子里选使得物品的总体积最大,典型的01背包问题,这里的体积是代价也是价值

Code

# 01背包问题 O(N^2) 这里的体积既是价值又是体积 
N = 20010
f = [0 for i in range(N)]
m = int(input())
n = int(input())
for i in range(1,n+1):
v = int(input())
for j in range(m,v-1,-1):
f[j] = max(f[j],f[j-v]+v)
print(m-f[m])