博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
0-1 背包问题
阅读量:5901 次
发布时间:2019-06-19

本文共 1823 字,大约阅读时间需要 6 分钟。

给定一个容量为c的背包,以及一组物品,每个物品的重量及价值分别存放在一个数组中:weights[0...n],values[0...n]

求得将物品放入背包后的最大价值是多少?

 

Code:自底向上

/**     *      * @param weights 每个物品的重量     * @param values 每个物品的价值     * @param c 背包容量     * @return     */    public int bestValue(int[] weights, int[] values, int c){        int m = weights.length;                int[][] dp = new int[m][c+1];        for (int i = 0; i <= c; i++) {            dp[0][i] = (i >= weights[0] ? values[0]:0);        }        for (int i = 1; i < m; i++) {            for (int j = 0; j <= c; j++) {                dp[i][j] = dp[i-1][j];                if(j >= weights[i]){                    dp[i][j] = Math.max(dp[i][j], dp[i-1][j-weights[i]]+values[i]);                }            }        }        return dp[m-1][c];    }

 

Code:自顶向下

/**     *      * @param dp 存储记忆化空间     * @param weights 每个物品的重量     * @param values 每个物品的价值     * @param index 放入物品的编号     * @param c 背包容量     * @return     */    private int bagValue(int[][] dp, int[] weights, int[] values, int index, int c){        if (index < 0 || c <= 0) {            return 0;        }                if(dp[index][c] != Integer.MIN_VALUE){            return dp[index][c];        }                int res = bagValue(dp, weights, values, index-1, c);        if (c >= weights[index]) {            res = Math.max(res, bagValue(dp, weights, values, index-1, c-weights[index]) + values[index]);        }        dp[index][c] = res;        return res;    }        public int bestValue1(int[] weights, int[] values, int c){        int n = weights.length;        int[][] dp = new int[n][c+1];        for (int i = 0; i < n; i++) {            for (int j = 0; j < c+1; j++) {                dp[i][j] = Integer.MIN_VALUE;            }        }        return bagValue(dp, weights, values, n-1, c);    }

 

转载于:https://www.cnblogs.com/realvie/p/7260013.html

你可能感兴趣的文章
Google Glass是工具不是玩具
查看>>
Asp.Net MVC4入门指南(10):第三方控件Studio for ASP.NET Wijmo MVC4 工具应用
查看>>
SharePoint 2010整合Silverlight 4应用 - 任务管理
查看>>
javascript 字符串操作 自定义函数
查看>>
安装配置vsftp
查看>>
手机辐射对人体健康没有危害
查看>>
AutoLISP查询椭圆的相关属性
查看>>
论修改系统默认的jdk
查看>>
处理文章附件路径问题
查看>>
Asp.net"页面加载中"效果实现
查看>>
C++类属性算法search
查看>>
2011/6/26 功能菜单模块分析
查看>>
25佳漂亮的网站底部设计案例欣赏
查看>>
中国象棋运动发展之我见
查看>>
ECMAScript旮里旮旯儿一(galigalaoer)
查看>>
【黑金视频连载】NIOSII视频教程(06)--沿中断实验
查看>>
HDU-2094 产生冠军
查看>>
poj1015
查看>>
eclipse导入静态类,自动代码提示静态方法
查看>>
探究微软工程实验室使用私有云平台始末 —— 专访微软研发工程实验室经理刘擎...
查看>>