首页 > TAG信息列表 > bagWeight
【动态规划】01背包问题
struct content { int weight; int value; content(int weight, int value) : weight(weight), value(value) {} }; /** *动态规划解决背包问题,使用滚动数组减少空间复杂度 * @param contents 物品 * @param bagWeight 背包的重量 * @return 能同时装进背包的物0-1背包问题
一、问题 有n个物品,它们的重量分别为weight[i],价值分别为value[i],现有一个承重为m的背包,每个物品要么拿一个,要么不拿,问背包能装下的最大价值。 二、解法 2.1 二维数组 直观的动态规划是二维数组 dp[i][j]表示在下标为0-i的物品中选择,且背包承重为j时的最大价值 最后要求dp[n-1][m(java)通过超市购物游戏案例的分析,掌握动态规划0-1背包问题的实际应用 。
输入:超市有很多种商品,让你从超市选购商品,每个品种只能选购一个,是最后都能装入承重量不超过7kg的纸袋子中,并且商品的价值最大,商品信息如下: 商品编码 1 2 3 4 5 6 7 8 9 10 商品名称 牙膏 啤酒 牛奶 面包 香皂 台灯 面粉 大米 酱油 纸巾 重量g 300 500【LeetCode】每日一题2021/11/25
思路 首先,前面的结果对后面的结果有相关性,有重叠子问题,考虑动态规划。 参考题解 初始化就是全为0。 举例 其实最难想的就是本题其实就是尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,这样就化解成01背包问题了。这里这句话,怎么考虑成为背包问题,然后就是背包容量是0 1背包问题之leetcode总结
直接上代码吧,可以递归解决也可以非递归解决。 import java.util.LinkedList; public class Main{ /* 由dp[i - 1][j]推出,即背包容量为j,里面不放物品i的最大价值,此时dp[i][j]就是dp[i - 1][j] 由dp[i - 1][j - weight[i]]推出,dp[i - 1][j - weight[i]] 为背包容01背包+完全背包
01背包 1 void test_1_wei_bag_problem() { 2 vector<int> weight = {1, 3, 4}; 3 vector<int> value = {15, 20, 30}; 4 int bagWeight = 4; 5 6 // 初始化 7 vector<int> dp(bagWeight + 1, 0); 8 for(int i = 0; i < we