【动态规划】 背包问题整理

数据结构与算法


背包问题01

题目类型描述: 给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高(from 百度百科)。

具象理解:

假设背包总容量top_weight为10,现共有四样物品(每样各一个),他们的重量和价格分别为:
背包问题01版
       当我们直观看到这幅表的时候基本可以确定我们会选择1,2,4号物品,这样可以最大程度地装载物品且使利润最大化(为13),但作为计算机,我们还不知道选择时应该遵从的原则(人有时候也不知道自己时如何做出选择的,尤其是我们不太确定是否将背包占满后利润一定最大),这是需要人为给计算机导入法则,让它按照我们规定好的路线安排物品的选取。

抽象建模:

       我们可以构建一个二维数组(或两个数组),在第一行存储各个物品的价格,第二行存储其重量,接下来电脑要做的事情就是根据我们给出的top_weight,从这n个物品中给出方案。

分治法:

       顾名思义,分而治之,我们将从“n个中选x个”这个大问题向下分化逐渐变小,比如,我们可以划分为“要不要第n个”和“从n-1个中选x个(不要第n个的话,如果要第n个就选x-1个,其中x未知)”这两个子问题。
       显然,我们需要用到递归。
       代码如下:

package KnapsackProbleminDynamicProgramming;

//动态规划中的背包问题
//分治法

public class One {
   
	
	public static void main(String args[]){
   
		int[][] items=new int[2][4];
		items[0][0]=2;items[0][1]=4;items[0][2]=3;items[0][3]=7;//第一行存储利润
		items[1][0]=2;items[1][1]=3;items[1][2]=5;items[1][3]=5;//第二行存储重量
		
		System.out.println(Solution(items, 10, 0));
	}
	
	public static int Solution(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值