算法之01背包

文章目录

  • 问题和思路
  • 算法实现

问题和思路

算法之01背包_第1张图片
算法之01背包_第2张图片
算法之01背包_第3张图片
算法之01背包_第4张图片
算法之01背包_第5张图片
算法之01背包_第6张图片
算法之01背包_第7张图片

算法实现

import java.util.Scanner;

public class Main
{
    public static void printArr(int[][] arr)
    {
        for(int i=0;i j)
                {
                    v[i][j] = v[i-1][j];
                }
                else if(w[i]<=j)
                {
//                    v[i][j] = Math.max(v[i-1][j],val[i] + v[i-1][j-w[i]]);
//                    记录商品到背包中的情况
                    if(v[i-1][j] < val[i] + v[i-1][j-w[i]])
                    {
                        v[i][j] = val[i] + v[i-1][j-w[i]];
                        path[i][j] = 1;
                    }
                    else
                    {
                        v[i][j] = v[i-1][j];
                    }
                }
            }
        }

        printArr(v);
        System.out.println();
        printArr(path);

        int i = path.length-1;
        int j = path[0].length-1;
        while(i>0 && j>0)
        {
            if(path[i][j] == 1)
            {
                System.out.println("第"+i+"件商品放入背包");
                j-=w[i];
            }
            i--;
        }
    }
}

你可能感兴趣的:(数据结构)