背包问题+图解

图解

在这里插入图片描述

代码实现

package com.atguigu.dynamic;/*** @创建人 wdl* @创建时间 2021/4/3* @描述*/
public class KnapsackProblem {public static void main(String[] args) {int[] w={1,4,3};//物品的重量int[] val={1500,3000,2000};//物品的价值 这里的val[i]就是前面的v[i]int m=4;//背包的容量int n=val.length;//物品的个数//创建二维数组//v[i][j] 表示在前i个物品中能够装入容量为j的背包中的最大价值int[][] v = new int[n + 1][m + 1];//为了记录放入商品的情况,我们定一个二维数组int[][] path = new int[n + 1][m + 1];//初始化第一行和第一列,这里在本程序中,可以不去处理,因为默认就是0for (int i = 0; i < v.length; i++) {v[i][0]=0;//将第一列设置为0}for (int i = 0; i < v[0].length; i++) {v[0][i]=0;//将第一行设置为0}//根据前面得到公式来动态规划处理for (int i = 1; i < v.length; i++) {//不处理第一行for (int j = 1; j < v[0].length; j++) {//不处理第一列//公式if(w[i-1]>j){//因为我们程序i是从1开始的,因此原来公式中w[i]修改成w[i-1]v[i][j]=v[i-1][j];}else {//说明://因为我们的i从1开始的,因此我们公式需要调整
//                    v[i][j]= Math.max(v[i-1][j],val[i-1]+v[i-1][j-w[i-1]]);//为了记录商品存放到背包的情况,我们不能简单的使用上面的公式,需要使用if-else来体现if (v[i-1][j]<val[i-1]+v[i-1][j-w[i-1]]){v[i][j]=val[i-1]+v[i-1][j-w[i-1]];//把当前的情况记录到pathpath[i][j]=1;}else {v[i][j]=v[i-1][j];}}}}//输出一下v看看目前的情况for (int i = 0; i < v.length; i++) {for (int j = 0; j < v[i].length; j++) {System.out.print(v[i][j]+" ");}System.out.println();}//输出最后我们是放入的哪些商品//遍历path,这样输出会把所有的放入情况都得到,其实我们只需要最后的放入
//        for (int i = 0; i < path.length; i++) {
//            for (int j = 0; j < path[i].length; j++) {
//                if (path[i][j]==1)
//                System.out.println("第"+i+"个商品放入到背包");
//            }
//        }//动脑筋int i=path.length-1;//行的最大下标int j=path[0].length-1;//列的最大下标while (i>0&&j>0){//从path的最后开始找if (path[i][j]==1){System.out.println("第"+i+"个商品放入到背包");j-=w[i-1];}i--;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/326627.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java循环结构教程

循环的语法我发一下&#xff1a;while( 布尔表达式 ) {//循环内容}do {//代码语句}while(布尔表达式);for(初始化; 布尔表达式; 更新) {//代码语句}今天录制了一下java 的循环结构视频&#xff0c;包括while,do while以及for循环&#xff0c;时间有点长&#xff0c;所以大家看的…

想和你一起为 Visual Studio 庆祝20岁生日

Visual Studio Live 倒计时开始…… 1997年1月28日&#xff0c;Visual Stuido 97正式推出&#xff0c;她将Visual Basic、Visual C、Visual J、Visual Foxpro、Visual InterDev聚合在一起&#xff0c;并且这个让人着迷的“小妖精”&#xff0c;统揽天下20年尚未有退位的意思。 …

2016蓝桥杯省赛---java---B---3(凑算式)

题目描述 凑算式 思路分析 通分 代码实现 package com.atguigu.TEST;class Main{static int a[]{1,2,3,4,5,6,7,8,9};static int ans;public static boolean check(){int xa[3]*100a[4]*10a[5];int ya[6]*100a[7]*10a[8];if((a[1]*ya[2]*x)%(y*a[2])0&&a[0](a[1…

微软.NET年芳15:我在Azure上搭建Photon服务器(C#.NET)

摘录网上的“.NET 15周年”信息如下&#xff1a; 微软的 .NET 框架本周迎来了 15 岁生日。.NET 的第一个版本在 2002 年 2 月 13 日作为的 Visual Studio.NET 的一部分首次公开亮相。过去 15 年&#xff0c;.NET 框架从一个流行的闭源软件开发平台&#xff0c;变成了一个开源的…

分治算法---汉诺塔

思路分析 代码实现 package com.atguigu.dac;public class Hanoitower {public static void main(String[] args) {hanoiTower(5,A,B,C);}//汉诺塔移动的方法//使用分治算法public static void hanoiTower(int num,char a,char b,char c){//如果只有一个盘if(num1){System.out…

.NET Core跨平台:使用.NET Core开发一个初心源商城总括

1..NET Core基本介绍 a 作为一个.NET的开发者&#xff0c;在以前的开发中&#xff0c;我们开发的项目基本都是部署在windows服务器上,但是在windows服务器上的话某些比较流行的解决访问量的方案基本都是先出现在linux上&#xff0c;而后才能迁移出现windows上&#xff0c;而且效…

二分查找非递归方式实现

思路分析 代码实现 package com.atguigu.binarysearchnorecursion;/*** 创建人 wdl* 创建时间 2021/4/2* 描述*/ public class BinarySearchNoRecur {public static void main(String[] args) {//测试int[] arr{1,3,8,10,11,67,89};int i binarySearch(arr,67);System.out.pr…

jQuery实现判断li的个数从而实现其他功能

需求&#xff1a;当ul中的li大于6个的时候显示图片&#xff0c;当li小于6个的时候隐藏图片&#xff0c;先来看看效果&#xff1a; 当有7个li的时候&#xff1a; 当有3个li的时候&#xff1a; 现在吧源码放上来&#xff1a; <!DOCTYPE html> <html><head…

windows mysql memcached_Memcached在Windows下的安装

前言 &#xff1a; 简介下 Memcached 和 Memcache 的区别和联系Memcached和Memcache的区别&#xff0c;其实很简单&#xff0c;一个是服务端&#xff0c;一个是客户端&#xff0c;就像mysql一样&#xff0c;我们在命令行里输入各种sql语句就能查询到需要的结果&#xff0c;这就…

辅助Visual Studio 2017部署的DevOps新工具

我们能看到Visual Studio 2017中的一个重大改进是对安装程序做了完全重写。前期的Visual Studio构建版本都是大一统的&#xff0c;完成安装需要相当长的时间和大量的磁盘空间。因此有需求要对安装过程做一些改进&#xff0c;这在本质上需要改进Visual Studio及其组件的检测方式…

2016蓝桥杯省赛---java---B---6(方格填数)

题目描述 方格填数 思路分析 全排列检查 代码实现 package com.atguigu.TEST;import static java.lang.Math.abs;class Main{static int a[]{0,1,2,3,4,5,6,7,8,9};static int ans;public static boolean check(){if (abs(a[0] - a[1]) 1 || abs(a[0] - a[3]) 1 || abs…

java中的tostring_java 中重写toString()方法

toString()方法 一般出现在System.out.println(类名.toString());toString()是一种自我描述方法 本身返回的是 getClass().getName() "" Integer.toHexString(hashCode());也就是 类名 hashCode的值重写toString() 只会对类生效&#xff0c;并不能字符串生效; 例如…

走过20年……你出现在哪里?

Visual Studio Live 倒计时ing 20岁的 Visual Studio 陪伴了一代代程序猿的成长&#xff0c;从青葱岁月一直走过而立之年&#xff0c;从一个小后生变成了 wuli欧巴……由单身狗也成了孩子他爸…… 如今二十载已过&#xff0c;你还记得当年大明湖畔的 Visual Studio 么&#xff…

2016蓝桥杯省赛---java---B---7(剪邮票)

题目描述 剪邮票 思路分析 全排列深度优先搜索连通检查 代码实现 package com.atguigu.TEST;class Main{static int a[] { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1 };static int ans;static boolean vis[]new boolean[12];static void dfs(int g[][], int i, int j) {g[i][…

css解决li边框重合问题

我直接写了个案例&#xff0c;先看下效果图&#xff1a; 下面是html代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>机构动态</title><style type"text/css">*{margin:0px;p…

学习ASP.NET Core,你必须知道“中间件”是什么?中间件如何注册?请求处理管道是如何通过中间件构建的?

ASP.NET Core 的请求处理管道由一个Server和一组有序排列的中间件构成&#xff0c;前者仅仅完成基本的请求监听、接收和响应的工作&#xff0c;请求接收之后和响应之前的所有工作都交给注册的中间件来完成。ASP.NET Core的中间件通过一个类型Func<RequestDelegate, RequestD…

2016蓝桥杯省赛---java---B---8(四平方和)

题目描述 四平方和 代码实现 package com.atguigu.TEST;import java.util.Scanner;class Main{public static void main(String[] args) {Scanner sc new Scanner(System.in);int N0;if (sc.hasNext()){Nsc.nextInt();}for (int a 0; a < 2400; a) {for (int b a; b…

在物理内存中观察CLR托管内存及GC行为

虽然看了一些书&#xff0c;还网络上的一些博文&#xff0c;不过对CLR托管内存细节依然比较模糊。而且因为工作原因总会有很多质疑&#xff0c;想要亲眼看到内存里二进制数据的变化。 所以借助winhex直接查看内存以证实书上的描述或更进一步揣摩CLR托管内存的运作方式&#xff…

2017蓝桥杯省赛---java---B---1(购物单)

题目描述 &#xff08;购物单&#xff09; 思路分析 cmd 打开电脑上的计算器算(算出来的结果是00结尾&#xff0c;作为检测) 答案 5200

DataProtection设置问题引起不同ASP.NET Core站点无法共享用户验证Cookie

这是这两天ASP.NET Core迁移中遇到的一个问题。2个ASP.NET Core站点&#xff08;对应于2个不同的ASP.NET Core Web应用程序&#xff09;&#xff0c;2个站点都可以登录&#xff0c;但在其中任1个站点登录后&#xff0c;在当前站点处于登录状态&#xff0c;访问另外1个站点却处于…