01背包问题---dp

    技术2023-10-03  74

    01背包问题—dp

    题目描述:

    有n个物品,它们有各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?

    样例输入:【4代表物品个数,8代表体积大小,下面4行代表第i个物品的体积和价值】 4 8 2 3 3 4 4 5 5 6

    样例输出: 10

    AC代码:

    #include <stdlib.h> #include <stdio.h> #include <algorithm> #include <iostream> #include <string.h> #include <math.h> using namespace std; int dp[10005][10005]; int value[10005],w[10005];//分别表示第i个物品的价值和体积 int main() { int n,v,i,j; cin>>n>>v; for(i=1;i<=n;i++) cin>>w[i]>>value[i]; //dp[i][j]:代表一共有i个物品,空间不超过j的最大价值 for(i=1;i<=n;i++) { for(j=1;j<=v;j++) { if(j<w[i]) dp[i][j]=dp[i-1][j]; else dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+value[i]); } } cout<<dp[n][v]<<endl; return 0; }
    Processed: 0.018, SQL: 9