IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 动态规划算法解决经典背包问题 -> 正文阅读

[数据结构与算法]动态规划算法解决经典背包问题

动态规划算法

应用场景:背包问题
条件:

  • 1)要求达到的目标为装入的背包的总价值最大,并且重量不超出
  • 2)要求装入的物品不能重复
    算法介绍:
    1)动态规划的核心思想:将大问题分为小问题进行解决,从而一步步获取最优解的处理方法
    2)算法与分治算法类似,其基本思想也是将带求解的问题分解成若干个小问题,先求子问题,然后从这些子问题的解得到原问题的解;
    3)与分治法不同的是,适合于动态规划求解的问题,经分解得到子问题往往不是互相独立的。(即下一阶段的求解是建立在上一阶段的解的基础上,进行进一步的求解)
    4)动态规划可以通过填表的方式来逐步推进,得到最优解。

动态规划解决背包问题01

01背包:即每个物品最多放一个

public class Demon1 {
	public static void main(String[] args) {
		int[] w= {1,4,3};  //物品的重量
		int[] val= {1500,3000,2000};  //物品的价值
		int m=4;  //背包的容量
		int n=val.length;  //物品的个数
		
		//创建二维数组
		//v[i][j]表示在前i个物品中能够装入容量为j的背包的最大价值
		int[][] v=new int[n+1][m+1];
		//记录商品情况
		int[][] path=new int[n+1][m+1];
		//初始化第一行和第一列,
		for(int i=0;i<v.length;i++) {
			v[i][0]=0;  //将第一列设置为0 
		}
		for(int i=0;i<v[0].length;i++) {
			v[0][i]=0;  //将第一行设置为0
		}
		
		for(int i=1;i<v.length;i++) {
			for(int j=1;j<v[0].length;j++) {
				//公式
				if(w[i-1]>j) {
					v[i][j]=v[i-1][j];
				}else {
					//公式需调整
//					v[i][j]=Math.max(v[i-1][j],val[i-1]+v[i-1][j-w[i-1]]);
//					v[i][j]=Math.max(v[i-1][j],val[i-1]+v[i-1][j-w[i-1]]);
					//记录商品情况
					if(v[i-1][j]<val[i-1]+v[i-1][j-w[i-1]]) {
						v[i][j]=val[i-1]+v[i-1][j-w[i-1]];
						//情况记录到path
						path[i][j]=1;
					}else {
						v[i][j]=v[i-1][j];
					}
				}
			}
		}
		//目前的情况
		for(int i=0;i<v.length;i++) {
			for(int j=0;j<v[i].length;j++) {
				System.out.print(v[i][j]+" ");
			}
			System.out.println();
		}
		//输出最后放入的那些商品
		//遍历path
//		for(int i=0;i<path.length;i++) {
//			for(int j=0;j<path[i].length;j++) {
//				if(path[i][j]==1) {
//					System.out.printf("第%d个商品放入背包\n",i);
//				}
//			}
//		}
		
		int i=path.length-1; //行的最大下标
		int j=path[0].length-1; //列的最大下标
		while(i>0&&j>0) {
			if(path[i][j]==1) {
				System.out.printf("第%d个商品放入背包\n",i);
				j-=w[i-1];
			}
			i--;
		}
		
	}
	
}

输出结果:
在这里插入图片描述

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-06 11:24:08  更:2021-09-06 11:25:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:23:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码