博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
01背包问题
阅读量:5172 次
发布时间:2019-06-13

本文共 1656 字,大约阅读时间需要 5 分钟。

01背包问题用DP(动态规划实现)

背包容量int c = 10

物品个数int n = 5

物品重量w[] = {0, 2, 2, 6, 5, 4}

物品价值v[] = {0, 6, 3, 5, 4, 6}

结果存放result[][] = new int[n + 1][c + 1]//result[i][j]的意义,i个物品中放到容量为j中最大价值(放或者不放两种情况)

递推关系result[i][j] = max{result[i - 1][j], result[i - 1][j - w[i]] + v[j]}

1 package com.gxf.bag; 2  3 /** 4  * 背包问题 5  * @author Administrator 6  * 7  */ 8 public class Bag { 9     int n = 5;//物品个数10     int w[] = {0, 2, 2, 6, 5, 4};//物体重量11     int v[] = {0, 6, 3, 5, 4, 6};//物体价值12     int c = 10;//背包容量13     int result[][] = new int[n + 1][c + 1];//注意这里的意义,这里应该可以压缩,最后结果存放在result[n][c]中14     15     public int getMaxValue(){
//result[i][j] 第i个物体放到容量为j的背包中最大价值16 17 for(int i = 0; i <= n; i++){18 for(int j = 0; j <= c; j++){19 if(0 == i){20 result[i][j] = 0;//没有物品放入,价值为021 }22 else if(j > 0 && j >= w[i]){23 result[i][j] = Math.max(result[i - 1][j], result[i - 1][j - w[i]] + v[i]);24 }25 }26 }27 28 return result[n][c];29 }30 /**31 * 打印数组result32 */33 public void showResult(){34 for(int i = 0; i <= n; i++){35 for(int j = 0; j <= c; j++){36 System.out.print(result[i][j] + "\t");37 }38 System.out.println();39 }40 }41 42 /**43 * 测试44 * @param args45 */46 public static void main(String args[]){47 Bag bag = new Bag();48 System.out.println(bag.getMaxValue());49 //bag.showResult();50 }51 }

 

转载于:https://www.cnblogs.com/luckygxf/p/4095726.html

你可能感兴趣的文章
4-10
查看>>
【HNOI2013】题解 bzoj3139~bzoj3144
查看>>
Zookeeper 集群如何高可用部署?
查看>>
html 标签的嵌套规则
查看>>
Android小试牛刀之1——对话框应用和SharedPeferences存储
查看>>
程序员吃自助餐后的反思
查看>>
PHP数组的操作
查看>>
xdebug php.ini 配置
查看>>
案例实操
查看>>
ApplicationContextAware接口的作用
查看>>
CSS3盒模型display:box详解
查看>>
JAVA中RSS解析器(rome.jar和jdom.jar)范例
查看>>
[Noi2010]Plane 航空管制 贪心
查看>>
T-SQL批量添加指定记录3种方法
查看>>
【完全开源】博客园客户端UWP版(上篇)
查看>>
[hbase] HBase内置过滤器的一些总结
查看>>
菜鸟学Linux - Hard Link与Symbolic Link
查看>>
c#读写txt文本
查看>>
Lua 5.1 for Delphi 2010
查看>>
JavaScript实践心得
查看>>