01背包问题-动态规划
来源:互联网 发布:c 语言编辑器 编辑:程序博客网 时间:2024/05/29 05:56
程序如下java实现:
import java.util.Scanner; /** * 01背包问题 */ public class ZeroOnePack{ public static void main(String[] args) { int N; //背包数目 int[] weight; //单个物品重量 int[] value; //单个物品价值 int[][] values ; //存放价值 int maxValue; //最大价值 Scanner in=new Scanner(System.in); maxValue=in.nextInt(); N=in.nextInt(); weight=new int[N+1]; value=new int[N+1]; values=new int[N+1][maxValue+1]; for(int i=1;i<=N;i++) { weight[i]=in.nextInt(); value[i]=in.nextInt(); } for(int i=0;i<=N;i++) values[i][0]=0; for(int i=0;i<=maxValue;i++) values[0][i]=0; /*核心算法*/ for ( int i = 1; i <= N; i++){ for ( int j = 1; j<=maxValue; j++){ if(weight[i]>j){ values[i][j]=values[i-1][j]; }else { values[i][j]=Math.max(values[i-1][j-weight[i]]+value[i], values[i-1][j]); } } } /*逆向输出*/ for(int i=values.length-1;i>0;i--) { for(int j=1;j<values[0].length;j++) { if(j==1) System.out.printf("%d",values[i][j]); else System.out.printf("%5d",values[i][j]); } System.out.println(); } System.out.print("最大价值: "+values[N][maxValue]); in.close(); } }结果如下:
10 5
2 6
2 3
6 5
5 4
4 6
0 6 6 9 9 12 12 15 15 15
0 6 6 9 9 9 10 11 13 14
0 6 6 9 9 9 9 11 11 14
0 6 6 9 9 9 9 9 9 9
0 6 6 6 6 6 6 6 6 6
最大价值: 15
0 1
- 动态规划--01背包问题
- 动态规划--01背包问题
- 动态规划 01背包问题
- 01背包问题 动态规划
- 动态规划01背包问题
- 01背包问题 动态规划
- 动态规划 - 01背包问题
- 动态规划 01 背包问题
- 01背包问题【动态规划】
- 动态规划01背包问题
- 动态规划--01背包问题
- 01背包问题-动态规划
- 动态规划01背包问题
- 01背包问题 动态规划
- 01背包问题 动态规划
- 01背包问题-动态规划
- 01背包问题-动态规划
- 01背包问题动态规划
- 【垂直搜索引擎搭建12】htmlparser简介
- ORA-30683: failure establishing connection to debugger
- JS的encodeURI和java的URLDecoder.decode使用介绍
- 03一些View总结
- 数组指针和指针数组
- 01背包问题-动态规划
- Linux内核笔记(一) 进程
- centos 修改主机名
- FragmentTabHost的使用
- HDU 4099 Revenge of Fibonacci
- 汉诺塔问题(+递推公式)
- 在腾讯创业节第一次遇见神州顺利办,让我有了共鸣
- 03安卓TextView
- linux awk命令详解