java实现背包问题例子_动态规划(背包问题)java实现
背包问题(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实现相关推荐
- java单链表例子_写一个java链表的例子?随便举例说一下。
展开全部 //单链表类 package dataStructure.linearList; import dataStructure.linearList.Node; //导入单链表结点类 impor ...
- java生成缩略图例子_具体介绍java生成缩略图的方法示例代码
这篇文章主要介绍了java生成缩略图的方法,结合具体实例形式分析了java生成缩略图过程中所涉及的各种常见的图形处理技巧,需要的朋友可以参考下 本文实例讲述了java生成缩略图的方法.分享给大家供大家 ...
- 什么是java一句话一个例子_一句话讲清楚什么是JavaEE
软件151 王强 1531610136 Java技术不仅是一门编程语言而且是一个平台.同时Java语言是一门有着特定语法和风格的高级的面向对象的语言,Java平台是Java语言编写的特定应用程序运行的 ...
- 运筹学状态转移方程例子_动态规划 Dynamic Programming
从运筹学和算法的角度综合介绍动态规划 规划论 Mathematical Programming / Mathematical Optimization In mathematics, computer ...
- java获取机器号_(转)JAVA获得机器码的实现
http://yangshangchuan.iteye.com/blog/2012401 首先,定义了一个统一的接口,以支持不同操作系统不同实现的透明切换: Java代码 收藏代码 /** *生成机 ...
- perl java远程调用函数调用_如何从Java调用Perl?
Inline-Java是从Perl调用java的常用库,以及这个应该允许从Java调用Perl的post propose a org.perl.java模块. 但是,由于不同 JVM的JNI实现的不可 ...
- java 配置文件的路径_详解java配置文件的路径问题
详解java配置文件的路径问题 详解java配置文件的路径问题 各种语言都有自己所支持的配置文件,配置文件中有很多变量是经常改变的.不将程序中的各种变量写死,这样能更方便地脱离程序本身去修改相关变量设 ...
- 新手学java 学哪方面_初学者学Java应从哪些方面学习?
原标题:初学者学Java应从哪些方面学习? Java作为应用于网络的最好语言,前景无限看好.然而,就算用Java建造一个不是很烦琐的web应用,也不是件轻松的事情.那么,初学者学Java应从哪些方面学 ...
- java 反射 动态编译_动态编译java源代码和反射调用问题
我从教程中得到了以下代码: package com.tom.labs; import java.io.IOException; import java.lang.reflect.Method; imp ...
最新文章
- 文档扫描识别——OpenCV与C++实现OCR文字识别
- IdHttpServer实现webservice
- java代码简单操作Redis数据Jedis jar
- 第二十四期:管理 | 成功领导远程IT团队的7个技巧
- synchronized()_Synchronized关键字引出的多种锁
- 用python画动态三维轨迹_python 画3维轨迹图并进行比较的实例
- 360浏览器或chrome谷歌浏览器 打不开HTTPS网站,显示您的连接不是私密连接解决办法
- php列表代码怎么做的,php项目实战:代码讲解之订单列表问题
- 2018-11-16
- 代码随想录程序员求职攻略完整pdf开放下载
- Ajax实现动态的二级级联菜单
- Linux升级glibc版本汉字乱码,glibc版本升级
- 使用PIL改变图像分辨率
- 电脑调节,电脑调节亮度怎么调
- wince 德赛西威2413_德赛西威NAV230凯立德2016春季专版C2134-C7M07-3921J0S
- python如何自己写库_亲自动手写一个python库(二)
- javascript中的字符串编码转换
- 100句温柔又体贴的话
- 谷歌学术上不了的解决办法
- 为什么量子计算机比经典计算机更强大,最新从实验层面证明:量子计算,确实比经典计算更具优势!...
热门文章
- 模拟——生活大爆炸版石头剪刀布(洛谷 P1328)
- 贪心算法——洛谷(P3817)小A的糖果
- 基础知识—数据类型-常量及符号
- 直播丨如何通过APEX实现数据库自动晨检功能
- 遇见未来 | 软件定义数据中心:人类文明运行在软件之上
- 鸿蒙轻内核源码分析:虚实映射
- 教你如何使用FusionInsight SqoopShell
- 618物流压力怎么扛?
- KubeCon直击 | 华为云以技术布道“云边端芯”
- linux poll函数 实现,Linux select/poll/epoll 原理(一)实现基础