01背包动态规划-java源码
2016-05-31 14:11
399 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010996555/article/details/51545292
阅读更多
算法设计与分析中的01背包问题是学习动态规划的经典问题,这里是该算法的Java实现,(我就不讲算法了,适合了解算法但是编程不太熟练的童鞋看)话不多说,直接上代码吧!
<span style="font-size:24px;">package Algorithms; public class Bag01 { public static void main(String[] args) { int s;//获得的最大价值 int w[]={1,2,3,4,5,3,6,8,2,8,1,4,6,4,7};//物品的重量 int v[]={5,8,9,20,20,3,12,8,4,8,3,44,36,4,7};//物品的价值 int x[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//物品的选取状态 0/1 int n,i; int C=50;//背包最大容量 n=15;// 物品数 s=KnapSack(n,w,v,x,C); System.out.println("最大物品价值为:"); System.out.println(s); } static int V[][] = new int[100][100]; //前i个物品装入容量为j的背包中获得的最大价值 public static int max(int a,int b) { if(a>=b) return a; else return b; } public static int KnapSack(int n,int w[],int v[],int x[],int C) { int i,j; for(i=0;i<=n;i++) V[i][0]=0; for(j=0;j<=C;j++) V[0][j]=0; for(i=1;i<=n-1;i++) //i=0 for(j=0;j<=C;j++) if(j<w[i]) V[i][j]=V[i-1][j]; else V[i][j]=max(V[i-1][j],V[i-1][j-w[i]]+v[i]); j=C; for(i=n-1;i>0;i--) //i>=0 { if(V[i][j]>V[i-1][j]) { x[i]=1; j=j-w[i]; } else x[i]=0; } System.out.print("选中的物品是:\n"); for(i=0;i<n;i++) System.out.print(x[i]); System.out.println(); return V[n-1][C]; } }</span><span style="font-size:32px;"> </span>代码不长,各变量的含义注释里也都有,如果你想看动态规划的结果记录矩阵的话,
for(int i=0;i<100;i++){ for(int j=0;j<100;j++){ System.out.print(V[i][j]); } System.out.println(); }Y(^o^)Y好了,就这样吧。 PS:转载请注明出处,作者xingsha,谢谢合作!(~ ̄▽ ̄)~
阅读更多
相关文章推荐
- 动态规划之背包问题01——Java实现
- 动态规划之背包问题01--java实现
- 动态规划之背包问题01——Java实现
- HDU 2546:饭卡(动态规划:01背包)
- 01背包问题动态规划详解(转载)
- 动态规划:01背包
- 动态规划01背包
- 杭电ACM OJ 1011 Starship Troopers 树的动态规划(树的dp)经典树形背包 java写的 包看懂 递归流程完全解析
- 动态规划0-1背包(java语言)
- 动态规划:01背包 复习
- 动态规划之01背包—小P寻宝记——粗心的基友
- 动态规划:01背包、完全背包
- 动态规划求解01背包相关的基本问题
- 动态规划之01背包
- 动态规划之背包01
- 01背包问题动态规划详解
- 动态规划7:砝码和种类优化成01背包问题
- 最大报销额(动态规划:01背包问题变形)
- 01背包问题的动态规划解法
- 动态规划之背包问题和区间模型--Java实现