背包问题(Knapsack problem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。问题的名称来源于如何选择最合适的物品放置于给定背包中。(摘自维基百科)

下面代码为0-1类型的背包。给定一个背包,容量为C,有n个物品,各物品对应重量为W[n],物品价值为 V[n],向量y=[0,1,0…1,0]代表物品的选法,要么是0、要么是1,为零代表选取第i个物品,为0表示不选取第i个物品。

根据上面设定,我们可以得到如下的递归式:

当W[n]>C时,  f(n,C)=f(n-1,C);

当W[n]<=C时,f(n,C) = max(f(n-1,C), V[n]+f(n-1, C-W[n]) );

初始条件为:f(i, 0) = 0; f(0,i) = 0; f(0,0) = 0;(注意下面程序判断的是当f(-1,i)时为0,这是由于java数组下标为0时还是表示有物品存在。-1表示没有物品)

根据上面的分析用递归实现的0-1背包代码如下:

public class Testpac {

/**

* @param args

*/

int C=12;

int W[]={2,3,4,5,6};

int V[]={1,4,3,6,8};

int y[]={-1,-1,-1,-1,-1};

public static void main(String[] args) {

// TODO Auto-generated method stub

Testpac pp=new Testpac();

System.out.println(pp.f(4,12));

pp.printY();

}

public void printY(){

for(int i=0;i

{

System.out.println(y[i]);

}

}

public int f(int n ,int C)

{

if(n==-1||C==0)

return 0;

int tmp1=f(n-1,C);

if(W[n]>C)

{

y[n]=0;

return tmp1;

}

int tmp2=V[n]+f(n-1,C-W[n]);

if(tmp1>tmp2)

{

y[n]=0;

return tmp1;

}

y[n]=1;

return tmp2;

}

}

java实现背包问题例子_动态规划(背包问题)java实现相关推荐

  1. java单链表例子_写一个java链表的例子?随便举例说一下。

    展开全部 //单链表类 package dataStructure.linearList; import dataStructure.linearList.Node; //导入单链表结点类 impor ...

  2. java生成缩略图例子_具体介绍java生成缩略图的方法示例代码

    这篇文章主要介绍了java生成缩略图的方法,结合具体实例形式分析了java生成缩略图过程中所涉及的各种常见的图形处理技巧,需要的朋友可以参考下 本文实例讲述了java生成缩略图的方法.分享给大家供大家 ...

  3. 什么是java一句话一个例子_一句话讲清楚什么是JavaEE

    软件151 王强 1531610136 Java技术不仅是一门编程语言而且是一个平台.同时Java语言是一门有着特定语法和风格的高级的面向对象的语言,Java平台是Java语言编写的特定应用程序运行的 ...

  4. 运筹学状态转移方程例子_动态规划 Dynamic Programming

    从运筹学和算法的角度综合介绍动态规划 规划论 Mathematical Programming / Mathematical Optimization In mathematics, computer ...

  5. java获取机器号_(转)JAVA获得机器码的实现

    http://yangshangchuan.iteye.com/blog/2012401 首先,定义了一个统一的接口,以支持不同操作系统不同实现的透明切换: Java代码  收藏代码 /** *生成机 ...

  6. perl java远程调用函数调用_如何从Java调用Perl?

    Inline-Java是从Perl调用java的常用库,以及这个应该允许从Java调用Perl的post propose a org.perl.java模块. 但是,由于不同 JVM的JNI实现的不可 ...

  7. java 配置文件的路径_详解java配置文件的路径问题

    详解java配置文件的路径问题 详解java配置文件的路径问题 各种语言都有自己所支持的配置文件,配置文件中有很多变量是经常改变的.不将程序中的各种变量写死,这样能更方便地脱离程序本身去修改相关变量设 ...

  8. 新手学java 学哪方面_初学者学Java应从哪些方面学习?

    原标题:初学者学Java应从哪些方面学习? Java作为应用于网络的最好语言,前景无限看好.然而,就算用Java建造一个不是很烦琐的web应用,也不是件轻松的事情.那么,初学者学Java应从哪些方面学 ...

  9. java 反射 动态编译_动态编译java源代码和反射调用问题

    我从教程中得到了以下代码: package com.tom.labs; import java.io.IOException; import java.lang.reflect.Method; imp ...

最新文章

  1. 文档扫描识别——OpenCV与C++实现OCR文字识别
  2. IdHttpServer实现webservice
  3. java代码简单操作Redis数据Jedis jar
  4. 第二十四期:管理 | 成功领导远程IT团队的7个技巧
  5. synchronized()_Synchronized关键字引出的多种锁
  6. 用python画动态三维轨迹_python 画3维轨迹图并进行比较的实例
  7. 360浏览器或chrome谷歌浏览器 打不开HTTPS网站,显示您的连接不是私密连接解决办法
  8. php列表代码怎么做的,php项目实战:代码讲解之订单列表问题
  9. 2018-11-16
  10. 代码随想录程序员求职攻略完整pdf开放下载
  11. Ajax实现动态的二级级联菜单
  12. Linux升级glibc版本汉字乱码,glibc版本升级
  13. 使用PIL改变图像分辨率
  14. 电脑调节,电脑调节亮度怎么调
  15. wince 德赛西威2413_德赛西威NAV230凯立德2016春季专版C2134-C7M07-3921J0S
  16. python如何自己写库_亲自动手写一个python库(二)
  17. javascript中的字符串编码转换
  18. 100句温柔又体贴的话
  19. 谷歌学术上不了的解决办法
  20. 为什么量子计算机比经典计算机更强大,最新从实验层面证明:量子计算,确实比经典计算更具优势!...

热门文章

  1. 模拟——生活大爆炸版石头剪刀布(洛谷 P1328)
  2. 贪心算法——洛谷(P3817)小A的糖果
  3. 基础知识—数据类型-常量及符号
  4. 直播丨如何通过APEX实现数据库自动晨检功能
  5. 遇见未来 | 软件定义数据中心:人类文明运行在软件之上
  6. 鸿蒙轻内核源码分析:虚实映射
  7. 教你如何使用FusionInsight SqoopShell
  8. 618物流压力怎么扛?
  9. KubeCon直击 | 华为云以技术布道“云边端芯”
  10. linux poll函数 实现,Linux select/poll/epoll 原理(一)实现基础