,,Java 数据结构与算法系列精讲之背包问题

,,Java 数据结构与算法系列精讲之背包问题

背包问题是研究动态规划应用的一个非常典型的课题。给它加上不同的限制和条件,可以产生很多变种。想要完全理解动态编程,就必须对背包问题了如指掌。

概述

从今天开始,小白将带你开启Java数据结构算法的新篇章。

动态规划

动态规划的核心思想是把一个大问题分成小问题来解决。先解决子问题,再从这些子问题的解中得到原问题的解。

动态规划的优势:

它可以帮助我们解决多阶段问题,简化复杂性。

动态规划的缺点:

没有统一的处理方法,具体问题具体分析。

当变量的维数增加时,计算量和存储量都会急剧增加。

背包问题

背包问题是指一个背包,有n个物品,容量为v,第I个物品的成本为c[i],价值为w[i]。解决哪些物品放入背包可以使价值之和最大化。

代码实现

公共背包问题{

公共静态void main(String[] args) {

int[] w={1,2,3 };//项目的重量

int[] val={6,10,12 };//该项的值

int m=5;//背包容量

int n=val.length//

//创建一个二维数组

int[][]v=new int[n 1][m 1];

//将第一行和第一列赋值为0

for(int I=0;一.长度;i ) {

v[I][0]=0;

}

for(int I=0;我v[0]。长度;i ) {

v[0][I]=0;

}

//动态处理

for(int I=1;一.长度;i ) {

for(int j=1;j v[0]。长度;j ) {

if (w[i - 1] j) {

//不要装背包

v[I][j]=v[I-1][j];

}否则{

//放在背包里

v[i][j]=Math.max(v[i - 1][j],val[I-1]v[I-1][j-w[I-1]);

}

}

}

//输出二维数组

for(int I=1;一.长度;i ) {

for(int j=1;j v[0]。长度;j ) {

system . out . print(v[I][j]' \ t ');

}

system . out . println();

}

}

}

输出结果:

66666

610161616

610161822

这就是这篇关于Java数据结构和算法系列的背包问题的文章。有关Java背包问题的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • mysql复合索引和组合索引,mysql组合索引数据结构
  • mysql复合索引和组合索引,mysql组合索引数据结构,Mysql之组合索引方法详解
  • mysql复合索引和组合索引,mysql复合索引数据结构
  • mysql复合索引和组合索引,mysql复合索引数据结构,MySQL的复合索引总结
  • b+树 多路搜索树,数据结构中树的分类
  • b+树 多路搜索树,数据结构中树的分类,数据结构-树(三):多路搜索树B树、B+树
  • avl树的构造,avl树特性,数据结构之AVL树详解
  • 数据结构c语言哈夫曼树,c语言哈夫曼树的构造,使用C语言详解霍夫曼树数据结构
  • c语言数据结构算法编程库,数据结构 c语言中文网
  • c语言数据结构算法编程库,数据结构 c语言中文网,C语言编程数据结构基础详解小白篇
  • c++纸牌游戏,数据结构纸牌游戏c语言
  • c++纸牌游戏,数据结构纸牌游戏c语言,C语言实战之纸牌游戏
  • ,,c#解析jobject的数据结构
  • ,,javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
  • ,,java 数据结构之堆排序(HeapSort)详解及实例
  • 留言与评论(共有 条评论)
       
    验证码: