动态规划01背包

#include<iostream>
#include<algorithm>
using namespace std;

struct Item{
    int w,d; //w体积,d价值
};
Item items[3500];
int f[13000];  //j个空间的能装的最大价值f[j]

int main(){
    int N,M;
    cin>>N>>M;
    for(int i=1;i<=N;i++){
        cin>>items[i].w>>items[i].d;
    }
    for(int j=M;j>=0;j--){
        if(items[1].w<=j) f[j]=items[1].d; //初始化第一个物品装填的最大价值
        else f[j]=0;
    }
    for(int i=2;i<=N;i++){
        for(int j=M;j>=0;j--){
            if(items[i].w<j){   //有足够的空间装的下第i物品
                f[j]=max(f[j],f[j-items[i].w]+items[i].d); //装与不装第i个物品之间取最优
            }
        }
    }
    cout<<f[M]<<endl;
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/zzyf/p/13392452.html