🐻作者: 芝士小熊饼干
📖 系列专栏: 数据结构-蓝桥杯-算法⭐
💪坚持天数:10天🤖
完全背包问题 ⭐
有N件物品和一个容量是V的背包。每件物品无限使用
第件物品的体积是v,价值是wi。
求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大.
输出最大价值。
输入格式
第一行两个整数,N,,用空格隔开,分别表示物品数量和背包容积接下来有行,每行两个整数,w,用空格隔开,分别表示第件物品的体积和价值
输出格式
输出一个整数,表示最大价值输入样例
4 5 1 2 2 4 3 4 4 5
输出样例:
8
N,V=map(int,input().split())
vlist,wlist=[0],[0]# vilst物品体积,wlist物品价值
for i in range(N):
tmp=list(map(int,input().split()))
vlist.append(tmp[0])
wlist.append(tmp[1])
# 创建dp表
dp=[[0 for i in range(V+1)] for i in range(N+1)]
# vlist.insert(0,0)
# wlist.insert(0,0)
for i in range(1,N+1):
for j in range(1,V+1):
if (vlist[i]<=j):
dp[i][j]=max(dp[i-1][j],dp[i][j-vlist[i]]+wlist[i])
else:
dp[i][j]=dp[i-1][j]
print('最大价值为',dp[N][V])
求解最大公约数
def gcd(a, b):
while b:
a, b = b, a % b
return a
求解最小公倍数
def lcm(a, b):
return a * b // gcd(a, b)
判断素数
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n**0.5)+1):
if n % i == 0:
return False
return True
求解组合数
def comb(n, k):
res = 1
for i in range(1, k + 1):
res *= n - k + i
res //= i
return res