0-1背包问题蛮力法求解(java版本)
|
package BackPack;
public class Solves {
public int[] DecimaltoBinary(int n,int m)
{
int r;//求余数
int consult=1;//求商
int j = 0;
int []arr=new int[m];
while (consult!=0)
{
consult = n / 2;
r = n % 2;
n = consult;
arr[j] = r;
j++;
}
return arr;
}
/**
* 将求得的一位数组子集转换为二维数组
* @param m
* @return
*/
public int[][] Subset(int m)
{
Solves s=new Solves();
int subset[][]=new int[(int) Math.pow(2, m)][m];
for (int i = 0; i <Math.pow(2, m); i++)
{
for (int j =0; j<m; j++)
{
subset[i][j]=s.DecimaltoBinary(i,m)[j];
}
}
return subset;
}
public int MaxValue(int arr[])
{
int max = arr[0];
for (int in = 0 ; in < arr.length; in++)
{
if( arr[in] > max)
{
max = arr[in];
}
}
return max;
}
}
|
|
package BackPack;
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
// TODO Auto-generated method stub
int m;//物品的数量
int capacity;//背包的容量
int wb=0;//初始化背包的质量
int vb=0;//初始化背包的价值
Solves s=new Solves();
Scanner sc=new Scanner(System.in);
System.out.print("请输入物品的数量:");
m=sc.nextInt();
System.out.print("请输入背包的容量:");
capacity=sc.nextInt();
int weight[]=new int[m];//用来记录每个物品的重量
int value[]=new int[m];//用来记录每个物品的价值
for(int i=0;i<m;i++)
{
System.out.print("请输入物品"+i+"的重量:");
weight[i]=sc.nextInt();
System.out.print("请输入物品"+i+"的价值:");
value[i]=sc.nextInt();
}
int MaxValue[]=new int[(int)Math.pow(2, m)];
System.out.println("各个方案如下:");
for (int i = 0; i <Math.pow(2, m); i++)
{
for (int j =0; j<m; j++)
{
if(s.Subset(m)[i][j]==1)
{
wb+=weight[j]*s.Subset(m)[i][j];
vb+=value[j];
System.out.print("物品:"+j+"");
}
}
if(wb<=capacity)
{
MaxValue[i]=wb;
System.out.println("------"+"方案"+i+":总价值为:"+vb+" "+"总重量为:"+wb);
}
else
{
System.out.println("------"+"方案"+i+":超出背包容量!");
}
wb=0;
vb=0;
}
System.out.println("背包可装入的最大容量为:"+s.MaxValue(MaxValue));
}
}
|
0-1背包问题蛮力法求解(java版本)的更多相关文章
- 0-1背包问题蛮力法求解(c++版本)
// 0.1背包求解.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #define ...
- 0-1背包问题——回溯法求解【Python】
回溯法求解0-1背包问题: 问题:背包大小 w,物品个数 n,每个物品的重量与价值分别对应 w[i] 与 v[i],求放入背包中物品的总价值最大. 回溯法核心:能进则进,进不了则换,换不了则退.(按照 ...
- Java实现动态规划法求解0/1背包问题
摘要: 使用动态规划法求解0/1背包问题. 难度: 初级 0/1背包问题的动态规划法求解,前人之述备矣,这里所做的工作,不过是自己根据理解实现了一遍,主要目的还是锻炼思维和编程能力,同时,也是为了增进 ...
- 经典递归问题:0,1背包问题 kmp 用遗传算法来解背包问题,hash表,位图法搜索,最长公共子序列
0,1背包问题:我写笔记风格就是想到哪里写哪里,有很多是旧的也没删除,代码内部可能有很多重复的东西,但是保证能运行出最后效果 '''学点高大上的遗传算法''' '''首先是Np问题的定义: npc:多 ...
- linux ubuntu下如何安装并且切换java版本(Unsupported major.minor version 52.0)
最近在做一个dcos(数据中心操作系统)的东西,需要用marathon来做进程管理.遗憾的是0.6版本的marathon在API方面很是缺少,换成了0.15版本之后,运行时提示“Unsupported ...
- 蓝桥杯 0/1背包问题 (java)
今天第一次接触了0/1背包问题,总结一下,方便以后修改.不对的地方还请大家不啬赐教! 上一个蓝桥杯的例题: 数据规模和约定 代码: import java.util.Scanner; public ...
- 复利计算5.0(改成Java版本)与 单元测试
//由于C语言版本不方便单元测试,所以改成了java版本,部分代码如下:import java.util.Scanner; public class FuLi{ public static void ...
- Java版本:识别Json字符串并分隔成Map集合
前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...
- 你的程序支持复杂的时间调度嘛?如约而来的 java 版本
你的程序支持复杂的时间调度嘛? 这篇文章介绍了时间适配器的c#版本,是给客户端用的,服务器自然也要有一套对应的做法,java版本的 [年][月][日][星期][时间] [*][*][*][*][*] ...
随机推荐
- 在SQL2008查找某数据库中的列是否存在某个值
在SQL2008查找某数据库中的列是否存在某个值 --SQL2008查找某数据库中的列是否存在某个值 create proc spFind_Column_In_DB ( @type int,--类型: ...
- 漫扯:从polling到Websocket
Http被设计成了一个单向的通信的协议,即客户端发起一个request,然后服务器回应一个response.这让服务器很为恼火:我特么才是老大,我居然不能给小弟发消息... 轮询 老大发火了,小弟们自 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(66)-MVC WebApi 用户验证 (2)
系列目录 前言: 回顾上一节,我们利用webapi简单的登录并进行了同域访问与跨域访问来获得Token,您可以跳转到上一节下载代码来一起动手. 继续上一篇的文章,我们接下来演示利用拿到的Token来访 ...
- 【开源】.Net 动态脚本引擎NScript
开源地址: https://git.oschina.net/chejiangyi/NScript 开源QQ群: .net 开源基础服务 238543768 .Net 动态脚本引擎 NScript ...
- Android 5.0 到 Android 6.0 + 的深坑之一 之 .so 动态库的适配
(原创:http://www.cnblogs.com/linguanh) 目录: 前序 一,问题描述 二,为何会如此"无情"? 三,目前存在该问题的知名SDK 四,解决方案,1 对 ...
- [转载]强制不使用“兼容性视图”的HTML代码
在IE8浏览器以后版本,都有一个"兼容性视图",让不少新技术无法使用.那么如何禁止浏览器自动选择"兼容性视图",强制IE以最高级别的可用模式显示内容呢?下面就介 ...
- APP漏洞扫描用地址空间随机化
APP漏洞扫描用地址空间随机化 前言 我们在前文<APP漏洞扫描器之本地拒绝服务检测详解>了解到阿里聚安全漏洞扫描器有一项静态分析加动态模糊测试的方法来检测的功能,并详细的介绍了它在针对本 ...
- Java泛型的历史
为什么Java泛型会有当前的缺陷? 之前的章节里已经说明了Java泛型擦除会导致的问题,C++和C#的泛型都是在运行时存在的,难道Java天然不支持“真正的泛型”吗? 事实上,在Java1.5在200 ...
- 新应用上线 Snippet
Snippet 是一款代码片段收集工具,经过一天三夜的开发终于上线了. 应用地址:snippets.barretlee.com 源码地址:barretlee/snippets 由于使用原生 JS 开发 ...
- Linux 中的数值计算和符号计算
不知道经常需要做科学计算的朋友们有没有这样的好奇:在 Linux 系统下使用什么工具呢?说到科学计算,首先想到的肯定是 Matlab,如果再说到符号计算,那就非 Mathematica 不可了.可惜, ...