01背包问题

题目来源:acwing

2. 01背包问题 - AcWing题库

N=1005
#f[i][j]:i件物品,体积为j 属性:总价值max
#分割:不要第i件物品,f[i][j]=f[i-1][j]
#要第i件物品:f[i-1][j-v(i)]+w[i]
f=[[0 for i in range(N)]for i in range(N)]
a=[0 for i in range(N)]
b=[0 for i in range(N)]
n,v=map(int,input().split())
for i in range(1,n+1):
    a[i],b[i]=map(int,input().split())
for i in range(1,n+1):
    for j in range(1,v+1):
        if j>=a[i]:
            f[i][j]=max(f[i][j],f[i-1][j-a[i]]+b[i])
        else:
            f[i][j]=f[i-1][j]
            
print(f[n][v])
    
    

区分01背包和完全背包的优化: 二维 =>一维:

N=1005
#f[i][j]:i件物品,体积为j 属性:总价值max
#分割:不要第i件物品,f[i][j]=f[i-1][j]
#要第i件物品:f[i-1][j-v(i)]+w[i]
f=[0 for i in range(N)]
a=[0 for i in range(N)]
b=[0 for i in range(N)]
n,v=map(int,input().split())
for i in range(1,n+1):
    a[i],b[i]=map(int,input().split())
for i in range(1,n+1):
    for j in range(v,a[i]-1,-1):
            f[j]=max(f[j],f[j-a[i]]+b[i])
            
print(f[v])
    
    

 

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐