01背包动态规划问题初析

#include<iostream>
#include<algorithm>
#include<cstring>
#define maxn 105
using namespace std;
int w[maxn];        //物品所占 
int v[maxn];            //物品价值 
int dp[maxn][maxn];

int main()
{
    int n, m;
    cin >> n >> m;    //输入物品个数与背包最大容纳值 
    for(int i = 1; i <= n; i++)
        cin >> w[i] >> v[i];     
                //输入物品所占与物品价值
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m; j++){
            if(w[i] > j)    dp[i][j] = dp[i-1][j];//装不下 
            else{
            dp[i][j] = max(dp[i-1][j-w[i]]+v[i], dp[i-1][j]);
                //前一行每一列+剩余容量最大价值 
                //价值没有更大,则不装满剩余容量,继续观望 
            }
        }
    }
    cout << dp[n][m];
}            

详情参见:

问题与代码:https://blog.csdn.net/lady_killer9/article/details/86260896

图:https://www.cnblogs.com/kkbill/p/12081172.html

两相结合理解。

posted on 2022-03-28 20:30  我欲  阅读(26)  评论(0)    收藏  举报