动态规划.背包问题--填满背包的最大价格(java)

题目描述

背包问题 给定两个长度都为N的数组weights和values,weights[i]和values[i]分别代表 i号物品的重量和价值 给定一个正数bag,表示一个载重bag的袋子,装的物品不能超过这个重量 返回能装下的最大价值

暴力递归

解题思路

要向获得最大值,其实就是在每一个物品之中做选择.
找出选择的最优解.
有了这个思路,那么递归就是在一个商品上选和不选去比较最大值,
递归的就已经出来了.
然后讨论base case 了,
一.weights 数组越界,没有商品可以选了,肯定是个结束条件
二.背包没有空间去装了,也是个base case 要返回的.
递归的结构和base case 都有了,直接看代码吧

代码演示

 /**
     * 获取最大值
     * @param w
     * @param v
     * @param bag
     * @return
     */
    public static int maxValue(int[]w,int[]v,int bag){
   
   
        //参数校验,题目中其实已经对数据限制了,
        if (null == w || v == null || w.length != v.length || w.length == 0 || bag < 0 ){
   
   
            return 0;
        }
        return process(w,v,0,bag);
    }


    /**
     * 递归方法
     * @param weights 不同商品重量
     * @param values 商品价值 和重量一一对应
     * @param index 下标值 代表要选第几号商品了
     * @param bag 背包容量
     * @return
     */
    public static int process(int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值