美文网首页工作生活
动态规划:0-1背包问题

动态规划:0-1背包问题

作者: 楠楠喜欢泡枸杞 | 来源:发表于2019-07-02 21:19 被阅读0次

        对于一组不同重量、不可分割的物品,我们需要选择一些装入背包,在满足背包最大重量限制的前提下,背包中物品总重量的最大值是多少呢?

        假设物品有5个,重量分别为2,2,4,6,3,背包的最大承载重量是9。

        求解思路:从第一个物品(编号从0开始)开始,对每一个物品进行决策。比如,第一个物品可能不放入背包,也可能放入背包,我们申请一个二维数组wx来存放它的状态。若第一个物品不放入背包,则wx[0][0]=1(第一个0表示第一(0)个物品,第二个0表示目前包里的物品重量);同理,第一个物品放入背包,则wx[0][2]=1。OK,这就是第一个物品的决策过程,接下来对第二个物品进行决策,依次类推。

        下图为决策过程:        

        代码:

import java.util.*;

class Solution

{

        public static void main(String[] args)

        {

                System.out.println(s());

        }

        public static int s()

        {

                int[] w={2,2,4,6,3};

                System.out.println("输入数字:");

                Scanner sc = new Scanner(System.in);

                int x=Integer.parseInt(sc.nextLine());

                int[][] wx=new int[5][x+1];

                wx[0][0]=1;//没有装第0件物品

                if(w[0]<=x)

                wx[0][w[0]]=1;//装上第0件物品

                //i代表开始处理第i件物品是否装上,j代表背包的重量

                //每次内循环中判断wx[i-1][j]是否为1,这个过程中已经把前一次所有装入背包的可能性涵盖了。

                for(int i=1;i<5;i++)

                {

                        for(int j=0;j<=x;j++)//不装第i件物品

                       {

                                if(wx[i-1][j]==1) wx[i][j]=wx[i-1][j];

                        }

                        for(int j=0;j<=x-w[i];j++)//装上第i件物品,减w[i]后的区间是背包容量还可以容纳一个i物品的区间

                        {

                                if(wx[i-1][j]==1) wx[i][j+w[i]]=1;

                        }

                }

                for(int i=x;i>=0;i--)

                {

                        if(wx[4][i]==1) return i;

                }

                return 0;

         }

}

相关文章

  • 动态规划

    0-1背包问题 自己实现的0-1背包问题的动态规划解法,先贴上吧,动态规划原理解释有空再写。

  • 初识动态规划

    0-1 背包问题 备忘录 动态规划-二维数组 动态规划-一维数组 0-1 背包问题升级版 回溯算法 动态规划-二维...

  • Algorithm进阶计划 -- 动态规划(下)

    经典动态规划背包问题最长子序列问题 1. 背包问题 1.1 0-1 背包问题 0-1 背包问题,描述如下: 上面...

  • 数据结构与算法笔记day23:动态规划

    1初识动态规划 这节课的内容不涉及动态规划的理论,而是通过两个例子:0-1背包问题、0-1背包问题升级...

  • 算法-动态规划-背包问题

    背包问题是基础的动态规划问题,包含了0-1背包,完全背包,多重背包等。 0-1背包 存在容量为 的背包 , 件体...

  • 背包问题

    背包问题属于典型的动态规划问题。这里我们将详细介绍0-1背包,完全背包和多重背包问题 一、 0-1背包 有N件物品...

  • 背包问题

    1、前言 背包问题是典型的动态规划问题,它有非常多的类型,本文讨论最常见的0-1背包问题 0-1背包问题描述:有一...

  • Algorithm

    bit manipulation 动态规划 0-1背包问题 寻找最小的k个数

  • 算法3:动态规划

    5.动态规划5.1 什么是动态规划?5.2 自底向上的动态规划:5.3 自顶向下的动态规划5.4 0-1背包问题:...

  • 动态规划-0-1背包问题

    动态规划-0-1背包问题 动态规划(dynamic programming)是解决多阶段决策问题常用的最优化理论,...

网友评论

    本文标题:动态规划:0-1背包问题

    本文链接:https://www.haomeiwen.com/subject/nwfxhctx.html