您当前的位置: 首页 >  算法

庄小焱

暂无认证

  • 1浏览

    0关注

    805博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

算法问题——背包问题的理解

庄小焱 发布时间:2020-09-13 15:03:10 ,浏览量:1

 

/**
 * Copyright (C), 2018-2020
 * FileName: 背包问题01问题
 * Author:   xjl
 * Date:     2020/9/13 14:28
 * Description:
 */
package 动态规划问题集合;

import java.util.Arrays;

public class 背包问题01问题 {

    int[][] memo;

    /**
     * 01背包问题
     *
     * @param W
     * @param V
     * @param C
     * @return
     */
    public int Kapsack01(int[] W, int[] V, int C) {
        int n = W.length - 1;
        return bestValue(W, V, n, C);
    }



    /**
     * 表示的是的【0 ……index】的物品的填充的容积为C的背包的最大的价值
     *
     * @param w
     * @param v
     * @param index
     * @param c
     * @return
     */
    private int bestValue(int[] w, int[] v, int index, int c) {
        if (index < 0 || c = w[index]) {
            res=Math.max(res, v[index] + bestValue(w, v, index - 1, c - w[index]));
        }
        return res;
    }

    /**
     * 采用的是记忆化搜索的形式来实现
     *
     * @param W
     * @param V
     * @param C
     * @return
     */
    public int Kapsack02(int[] W, int[] V, int C) {
        int n = W.length - 1;
        memo = new int[n + 1][C + 1];
        Arrays.fill(memo, -1);
        return bestValue1(W, V, n, C);
    }

    /**
     * 表示的是的【0 ……index】的物品的填充的容积为C的背包的最大的价值
     * 采用个的是记忆化搜索的来实现的这样的一个效果
     *
     * @param w
     * @param v
     * @param index
     * @param c
     * @return
     */
    private int bestValue1(int[] w, int[] v, int index, int c) {
        if (index < 0 || c = w[index]) {
            res=Math.max(res, v[index] + bestValue1(w, v, index - 1, c - w[index]));
        }
        memo[index][c] = res;
        return res;
    }

}

 

 

 

关注
打赏
1657692713
查看更多评论
立即登录/注册

微信扫码登录

0.0411s