背包问题DP解法-递推1

/**
 * 有n个重量和价值分别为Wi,Vi的物品。
 * 从这些物品中挑选出总重量不超过W的物品,求所有有挑选方案中价值总和的最大值
 * DP递推解法
 * @author haofan.whf
 * @version $Id: Bag02.java, v 0.1 2018年06月15日 下午6:02 haofan.whf Exp $
 */
public class Bag02 {

    //物品数量
    int n = 4;

    //背包容量
    int W = 5;

    //物品重量
    int[] WArray = new int[]{2,1,3,2};

    //物品价值
    int[] VArray = new int[]{3,2,4,2};

    int[][] dp = new int[n+1][W+1];

    /**
     * dp[n][j] = 0
     *
     * if(j < WArray[i]){
     *     dp[i][j] = dp[i+1][j]
     * }else{
     *     dp[i][j] = max(dp[i+1][j], dp[i+1][j-WArray[i]]+VArray[i])
     * }
     */
    public void solution(){
        for(int i = n - 1; i >= 0; i--){
            for (int j = 0; j <= W; j++) {
                if(j < WArray[i]){
                    dp[i][j] = dp[i+1][j];
                }else{
                    dp[i][j] = Math.max(dp[i+1][j], dp[i+1][j-WArray[i]]+VArray[i]);
                }
            }
        }
        System.out.println(dp[0][5]);
    }

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • A - 数字三角形题解:假设getMax(i,j)表示点(i,j)到底部的最长路径,那么getMax(i,j)=m...
    Gitfan阅读 915评论 0 0
  • 我端站三楼小窗前 饮一口白开水的香甜 我也望向你离开的遥远 如人饮水自我休眠 墨绿的山色是许久未见 空气中秘密也纷...
    毛小诗阅读 105评论 0 2
  • 难过的日子好过的年。 老秦将拾掇干净的公鸡用砍刀剁开,好的有肉的地方切成两厘米见方的小块。放在一个小瓷盆里,撒上盐...
    南良大维阅读 323评论 0 2
  • 最近几天,第一件事就是完任务,每天几乎都超额完成,内心很赞! 一切都是最好的安排!
    华丽的美丽丽阅读 253评论 0 0