背包问题是研究动态规划应用的一个非常典型的课题。给它加上不同的限制和条件,可以产生很多变种。想要完全理解动态编程,就必须对背包问题了如指掌。
概述
从今天开始,小白将带你开启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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。