01背包问题

#include<bits/stdc++.h>
using namespace std;
const int N = 1030;
int main()
{
    int f[N][N]={0},v[N]={0},w[N]={0},n,m;//v[i]:第i个物品的体积,w[i]:第i个物品的价值
    //f[i][j]:当选择i个物品时背包已用j个空间时的最大价值,n:有n个物品,m: 背包容量为m
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>v[i]>>w[i];
    for(int i=1;i<=n;i++)//遍历1~n个物品 
    {
        for(int j=0;j<=m;j++)//遍历背包的不同容量(0~m) 
        {
            f[i][j]=f[i-1][j];//在不装物品i时的最大价值 
            if(j>=v[i])
            {//                装            不装 
                f[i][j]=max(f[i][j],f[i-1][j-v[i]]+w[i]);//装与不装取大 
            }
        }
    }
    int an=-100;
    for(int i=0;i<=m;i++) an=max(an,f[n][i]);//n个物品选择后找出最大值 
    cout<<an;
    return 0;
}

 

posted @ 2022-01-18 16:08  王浩泽  阅读(15)  评论(0)    收藏  举报