动态规划——国王挖掘金矿

国王挖金子(动态规划) 最近在学习动态规划,看到该例题,看文章的代码有些错误,自己写了一下。 一维数组解法。 例题2:国王和金矿 (双维度动态规划) 有一个国家发现了5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人数也不同。参与挖矿工人的总数是10人。每座金矿要么全挖,要么不挖,不能派出一半人挖取一半金矿。要求用程序求解出,要想得到尽可能多的黄金,应该选择挖取哪几座金矿? 1、400金/5人 2、500金/5人 3、200金/3人 4、300金/4人 5、350金/3人 // n:金矿个数 // w:人数 阅读详情

题目:


有一个国家,所有的国民都非常老实憨厚,某天他们在自己的国家发现了十座金矿,并且这十座金矿在地图上排成一条直线,国王知道这个消息后非常高兴,他希望能够把这些金子都挖出来造福国民,首先他把这些金矿按照在地图上的位置从西至东进行编号,依次为0、1、2、3、4、5、6、7、8、9,然后他命令他的手下去对每一座金矿进行勘测,以便知道挖取每一座金矿需要多少人力以及每座金矿能够挖出多少金子,然后动员国民都来挖金子。


输入数据格式为


先输入 人数 金矿数

然后接下来是每个金矿所需人数 能挖掘金矿


测试数据:

100 5
77 92
22 22
29 87
50 46
99 90


转移方程

 当mineNum = 1 且people >= peopleNeeded[mineNum]时 f(people,mineNum) = gold[mineNum]

 当mineNum = 1 且people < peopleNeeded[mineNum]时 f(people,mineNum) = 0

 当mineNum != 1 时 f(people,mineNum) = f(people-peopleNeeded[mineNum], mineNum-1) + gold[mineNum]与f(people, mineNum-1)中的较大者



第一种方法:构建二维数组,遍历二维数据,计算每个值 f(people,mineNum)

/**
	 * 通过使用二维数据求解 每个问题规模
	 * 该方法很多无需计算的问题计算了
	 * 
	 * 时间复杂度为 0(总人数*金矿数)
	 */
	public static int calculateMaxGoldValue(int peopleTotal, int mineNum, int peopleNeed[], int goldValue[], int maxGoldVlueMatrix[][], int maxGoldMap[][]) {
		// 人数为0 时全部金矿表示为0,不可能有金矿
		for(int j=0; j<mineNum; j++) {
			maxGoldVlueMatrix[0][j] = 0;
		}
		// 第一个金矿,作为判断的边界
		for(int i=1; i<= peopleTotal; i++) {
			if(i >= peopleNeed[1]) {
				maxGoldVlueMatrix[i][1] = goldValue[1];
				maxGoldMap[i][1] = 2;
			} else {
				maxGoldVlueMatrix[i][1] = 0;
				maxGoldMap[i][0] = 1;
			}
		}
		// 第一个以外的金矿
		for(int i=1; i<= peopleTotal; i++) {
			for(int j=2; j<= mineNum; j++) {
				// 根据转移方程 f(peopleNum, mineNum) = max[ f(peopleNum, mineNum-1), f(peopleNum-peopleNeed[j], mineNum-1)+goldVlue[j]]
				// 求当前最优解的结果 取决于两个子问题的最优解比较
				// f(peopleNum-peopleNeed[j], mineNum-1)+goldVlue[j] 子问题为 选择当前金矿,但是前提是当前总人数能提供给 金矿所需人数.
				
				// if语句当前总人数能提供给 金矿所需人数,如果不能提供,则当前金矿无需选择,直接选择另外一个子问题的结果即可
				// else 如果当前人数能够提供,则还需要判断两个子问题各自的最优解,再求出母问题的最优解
				if(i < peopleNeed[j] || (i - peopleNeed[j]) < 0) {
					maxGoldVlueMatrix[i][j] = maxGoldVlueMatrix[i][j-1];
					// 标记选择转移方程中第一种,即当前金矿没有选择
					maxGoldMap[i][j] = 1;
				} else {
					if(maxGoldVlueMatrix[i][j-1] >= (maxGoldVlueMatrix[i-peopleNeed[j]][j-1] + goldValue[j])) {
						maxGoldVlueMatrix[i][j] = maxGoldVlueMatrix[i][j-1];
						// 标记选择转移方程中第一种,即当前金矿没有选择
						maxGoldMap[i][j] = 1;
					} else {
						maxGoldVlueMatrix[i][j] = maxGoldVlueMatrix[i-peopleNeed[j]][j-1] + goldValue[j];
						// 标记选择转移方程中第二种,即选择当前金矿
						maxGoldMap[i][j] = 2;
					}
				}
			}
		}
		
		return maxGoldVlueMatrix[peopleTotal][mineNum];
	}



第二种方法:使用递归


	/**
	 * 使用递归的方式计算,但是由于计算过的子问题会做备忘录,所以不会出现重复计算问题
	 * 而且使用该方法能够避免不需要计算的问题
	 * 也就是二维数组中只计算相关的子问题
	 */
	public static int calculateMaxGoldValue2(int peopleTotal, int mineNum, int peopleNeed[], int goldValue[], int maxGoldVlueMatrix[][], int maxGoldMap[][]) {
		int curMaxGoldValue = 0;
		int step1, step2;
		// 如果问题计算过,[对应动态规划中的“做备忘录”]
		if(maxGoldVlueMatrix[peopleTotal][mineNum] != 0) {
			curMaxGoldValue = maxGoldVlueMatrix[peopleTotal][mineNum];
		// 如果仅有一个金矿时 [对应动态规划中的“边界”]
		} else if(mineNum == 1) {
			// 当给出的人数足够开采这座金矿
			if(peopleTotal > peopleNeed[mineNum]) {
				// 得到的最大值就是这座金矿的金子数
				curMaxGoldValue = goldValue[mineNum];
				maxGoldMap[peopleTotal][mineNum] = 2;
			} else {
				// 否则这唯一的一座金矿也不能开采
				curMaxGoldValue = 0;
				maxGoldMap[peopleTotal][mineNum] = 1;
			}
		// 如果给出的人够开采这座金矿 [对应动态规划中的“最优子结构”]	
		} else if(peopleTotal >= peopleNeed[mineNum]) {
			// 考虑当前金矿开采与不开采两种情况,取最大值
			step1 = calculateMaxGoldValue2(peopleTotal, mineNum-1, peopleNeed, goldValue, maxGoldVlueMatrix, maxGoldMap);
			step2 = calculateMaxGoldValue2(peopleTotal-peopleNeed[mineNum], mineNum-1, peopleNeed, goldValue, maxGoldVlueMatrix, maxGoldMap);
			if(step1 >= (step2+goldValue[mineNum])) {
				curMaxGoldValue = step1;
				maxGoldMap[peopleTotal][mineNum] = 1;
			} else {
				curMaxGoldValue = step2 + goldValue[mineNum];
				maxGoldMap[peopleTotal][mineNum] = 2;
			}
		} else {
			// 否则给出的人不够开采这座金矿 [对应动态规划中的“最优子结构”]
			// 仅考虑不开采的情况
			step1 = calculateMaxGoldValue2(peopleTotal, mineNum-1, peopleNeed, goldValue, maxGoldVlueMatrix, maxGoldMap);
			curMaxGoldValue = step1;
			maxGoldMap[peopleTotal][mineNum] = 1;
		}
		// 做备忘录   
		maxGoldVlueMatrix[peopleTotal][mineNum] = curMaxGoldValue;
		return curMaxGoldValue;
	}
	



代码:


package dynamic_programming;

import java.util.Scanner;

/**
 * 给定一定人数peopleNum,以及一定金矿数目mineNum
 * 接下来分别输入每个金矿开采  所需人数peopleNeed 和  该金矿开采后  可得多少黄金goldValue
 * 计算可获取最大黄金value
 * 
 * @author LiangGe
 *
 * 测试数据:
100 5
77 92
22 22
29 87
50 46
99 90
 */
public class MineQuestion {
	
	/**
	 * 通过使用二维数据求解 每个问题规模
	 * 该方法很多无需计算的问题计算了
	 * 
	 * 时间复杂度为 0(总人数*金矿数)
	 */
	public static int calculateMaxGoldValue(int peopleTotal, int mineNum, int peopleNeed[], int goldValue[], int maxGoldVlueMatrix[][], int maxGoldMap[][]) {
		// 人数为0 时全部金矿表示为0,不可能有金矿
		for(int j=0; j<mineNum; j++) {
			maxGoldVlueMatrix[0][j] = 0;
		}
		// 第一个金矿,作为判断的边界
		for(int i=1; i<= peopleTotal; i++) {
			if(i >= peopleNeed[1]) {
				maxGoldVlueMatrix[i][1] = goldValue[1];
				maxGoldMap[i][1] = 2;
			} else {
				maxGoldVlueMatrix[i][1] = 0;
				maxGoldMap[i][0] = 1;
			}
		}
		// 第一个以外的金矿
		for(int i=1; i<= peopleTotal; i++) {
			for(int j=2; j<= mineNum; j++) {
				// 根据转移方程 f(peopleNum, mineNum) = max[ f(peopleNum, mineNum-1), f(peopleNum-peopleNeed[j], mineNum-1)+goldVlue[j]]
				// 求当前最优解的结果 取决于两个子问题的最优解比较
				// f(peopleNum-peopleNeed[j], mineNum-1)+goldVlue[j] 子问题为 选择当前金矿,但是前提是当前总人数能提供给 金矿所需人数.
				
				// if语句当前总人数能提供给 金矿所需人数,如果不能提供,则当前金矿无需选择,直接选择另外一个子问题的结果即可
				// else 如果当前人数能够提供,则还需要判断两个子问题各自的最优解,再求出母问题的最优解
				if(i < peopleNeed[j] || (i - peopleNeed[j]) < 0) {
					maxGoldVlueMatrix[i][j] = maxGoldVlueMatrix[i][j-1];
					// 标记选择转移方程中第一种,即当前金矿没有选择
					maxGoldMap[i][j] = 1;
				} else {
					if(maxGoldVlueMatrix[i][j-1] >= (maxGoldVlueMatrix[i-peopleNeed[j]][j-1] + goldValue[j])) {
						maxGoldVlueMatrix[i][j] = maxGoldVlueMatrix[i][j-1];
						// 标记选择转移方程中第一种,即当前金矿没有选择
						maxGoldMap[i][j] = 1;
					} else {
						maxGoldVlueMatrix[i][j] = maxGoldVlueMatrix[i-peopleNeed[j]][j-1] + goldValue[j];
						// 标记选择转移方程中第二种,即选择当前金矿
						maxGoldMap[i][j] = 2;
					}
				}
			}
		}
		
		return maxGoldVlueMatrix[peopleTotal][mineNum];
	}
	
	
	/**
	 * 使用递归的方式计算,但是由于计算过的子问题会做备忘录,所以不会出现重复计算问题
	 * 而且使用该方法能够避免不需要计算的问题
	 * 也就是二维数组中只计算相关的子问题
	 */
	public static int calculateMaxGoldValue2(int peopleTotal, int mineNum, int peopleNeed[], int goldValue[], int maxGoldVlueMatrix[][], int maxGoldMap[][]) {
		int curMaxGoldValue = 0;
		int step1, step2;
		// 如果问题计算过,[对应动态规划中的“做备忘录”]
		if(maxGoldVlueMatrix[peopleTotal][mineNum] != 0) {
			curMaxGoldValue = maxGoldVlueMatrix[peopleTotal][mineNum];
		// 如果仅有一个金矿时 [对应动态规划中的“边界”]
		} else if(mineNum == 1) {
			// 当给出的人数足够开采这座金矿
			if(peopleTotal > peopleNeed[mineNum]) {
				// 得到的最大值就是这座金矿的金子数
				curMaxGoldValue = goldValue[mineNum];
				maxGoldMap[peopleTotal][mineNum] = 2;
			} else {
				// 否则这唯一的一座金矿也不能开采
				curMaxGoldValue = 0;
				maxGoldMap[peopleTotal][mineNum] = 1;
			}
		// 如果给出的人够开采这座金矿 [对应动态规划中的“最优子结构”]	
		} else if(peopleTotal >= peopleNeed[mineNum]) {
			// 考虑当前金矿开采与不开采两种情况,取最大值
			step1 = calculateMaxGoldValue2(peopleTotal, mineNum-1, peopleNeed, goldValue, maxGoldVlueMatrix, maxGoldMap);
			step2 = calculateMaxGoldValue2(peopleTotal-peopleNeed[mineNum], mineNum-1, peopleNeed, goldValue, maxGoldVlueMatrix, maxGoldMap);
			if(step1 >= (step2+goldValue[mineNum])) {
				curMaxGoldValue = step1;
				maxGoldMap[peopleTotal][mineNum] = 1;
			} else {
				curMaxGoldValue = step2 + goldValue[mineNum];
				maxGoldMap[peopleTotal][mineNum] = 2;
			}
		} else {
			// 否则给出的人不够开采这座金矿 [对应动态规划中的“最优子结构”]
			// 仅考虑不开采的情况
			step1 = calculateMaxGoldValue2(peopleTotal, mineNum-1, peopleNeed, goldValue, maxGoldVlueMatrix, maxGoldMap);
			curMaxGoldValue = step1;
			maxGoldMap[peopleTotal][mineNum] = 1;
		}
		// 做备忘录   
		maxGoldVlueMatrix[peopleTotal][mineNum] = curMaxGoldValue;
		return curMaxGoldValue;
	}
	
	/**
	 * 打印出具体选择哪些金矿
	 */
	public static void printChosenMine(int peopleTotal, int mineNum, int peopleNeed[], int maxGoldMap[][]) {
		System.out.println("金矿选择情况如下:");
		boolean mineChosen[] = new boolean[mineNum + 1];
		int j = peopleTotal;
		for(int i=mineNum; i>=1; i--) {
			if(maxGoldMap[j][i] == 1) {
				mineChosen[i] = false;
			} else if(maxGoldMap[j][i] == 2){
				mineChosen[i] = true;
				j -= peopleNeed[i];
			}
		}
		
		for(int i=0; i<mineNum; i++) {
			if(mineChosen[i]) {
				System.out.format("%3d", i);
			}
		}
	}
	
	public static void main(String args[]) {
		Scanner scanner = new Scanner(System.in);
		int peopleNeed[];
		int goldValue[];
		int maxGoldVlueMatrix[][];
		int maxGoldMap[][];
		int maxGoldValue = 0;
		while(scanner.hasNext()) {
			int peopleTotal = scanner.nextInt();
			int mineNum = scanner.nextInt();
			scanner.nextLine();
			if(peopleTotal == 0 && mineNum == 0) {
				break;
			}
			peopleNeed = new int[mineNum + 1];
			goldValue = new int[mineNum + 1];
			for(int i=1; i<=mineNum; i++) {
				peopleNeed[i] = scanner.nextInt();
				goldValue[i] = scanner.nextInt();
				scanner.nextLine();
			}
			maxGoldVlueMatrix = new int[peopleTotal + 1][mineNum + 1];
			maxGoldMap = new int[peopleTotal + 1][mineNum + 1];

/*			maxGoldValue = calculateMaxGoldValue(peopleTotal, mineNum, peopleNeed, goldValue, maxGoldVlueMatrix, maxGoldMap);
			
			System.out.println("maxGoldValue = " + maxGoldValue);
			
			printChosenMine(peopleTotal, mineNum, peopleNeed, maxGoldMap);*/
						
			maxGoldValue = calculateMaxGoldValue2(peopleTotal, mineNum, peopleNeed, goldValue, maxGoldVlueMatrix, maxGoldMap);
			System.out.println("maxGoldValue = " + maxGoldValue);
			
			printChosenMine(peopleTotal, mineNum, peopleNeed, maxGoldMap);
		}
	}
}


题目以及解题来源: http://www.cnblogs.com/sdjl/articles/1274312.html


js 实现动态规划 js实现动态规划 , 优化时间 , 优化空间 详情见小灰的算法之旅 , 以下是我个人的见解 题目: 很久很久以前,有一位国王拥有5座金矿,每座金矿的黄金储量不同, 需要参与挖掘的工人人数也不同。例如有的金矿储量是500kg黄金,需 要5个工人来挖掘;有的金矿储量是200kg黄金,需要3个工人来挖 掘…… 如果参与挖矿的工人的总数是10。每座金矿要么全挖,要么不挖,不能 派出一半人挖取一半的金矿。要求用程序求出,要想得到尽可能多的黄金,应该选择挖取哪几座金矿? 一开始的思路: 首先我们想到的是 : 求出每个 阅读详情

相关推荐

算法分析与设计 实验三 动态规划

目录实验环境动态规划使用动态规划的特征1.矩阵连乘问题问题描述解题思路2.剪绳子问题问题描述解题思路3.国王和金矿问题描述解题思路4.最长公共子序列问题描述解题思路 实验环境 Windows 10+DEV-C++ 动态规划 动态规划问题是算法设计与分析中的热门话题,如果要求一个问题最优解(通常是最大值或者最小值),而且该问题能够分解成若干个问题,并且小问题之间也存在重叠的子问题,则考虑采用动态规划。 使用动态规划的特征 使用动态规划特征: 求一个问题的最优解 大问题可以分解为子问题,子问题还有重叠的更小的

拔牙不打麻药 946

动态规划(解析国王与挖矿问题)

动态规划包含三个重要概念: 最优子结构 边界  状态转移公式   例题1:爬楼梯问题 or 斐波拉契数列(单维度动态规划 相对容易) 例题2:国王和金矿 (双维度动态规划) 有一个国家发现了5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人数也不同。参与挖矿工人的总数是10人。每座金矿要么全挖,要么不挖,不能派出一半人挖取一半金矿。要求用程序求解出,要想得到尽可能多的黄金,应该选择挖...

记录求学阶段的技术学习、项目实践与成长思考。 3817

【面试经典】求解金矿问题(动态规划初级)

问题:有一个国家发现了5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人数也不同(情况如下图) 金矿编号 黄金储量 需要人数 1 400 5 2 500 5 3 200 3 4 300 4 5 350 3 首先,动态规划方法适合的题型4个基本特点是: 1、最优子结构,当前一个状态得到最佳解时,当前状...

爱科比的博客 3013

动态规划经典例题-国王的金矿问题

金矿问题 问题概述: 有一位国王拥有5座金矿,每座金矿的黄金储量不同, 需要参与挖掘的工人人数也不同。例如有的金矿储量是500kg黄金,需 要5个工人来挖掘;有的金矿储量是200kg黄金,需要3个工人来挖 掘…… 如果参与挖矿的工人的总数是10。每座金矿要么全挖,要么不挖,不能 派出一半人挖取一半的金矿。要求用程序求出,要想得到尽可能多的黄 金,应该选择挖取哪几座金矿? 什么是动态规划: 动态规划:将复杂问题简化为规模较小的子问题,再从简单的子问题自底向上一步一步递推,最终得到复杂问题的最优解 思路: 利用

千里之行,始于足下 1973

一文弄懂动态规划(DP Dynamic Programming)下楼梯,国王和金矿,背包问题,Dijkstra算法

动态规划 参考链接 漫画算法,什么是动态规划? DP 动态规划是一种分阶段求解决策问题的数学思想 题目一 问:下楼梯问题,有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶,请问有多少中走法。 思路 刚才这个题目,你每走一步就有两种走法,暂时不管0级到8级台阶的过程。想要走到10级,必然是从8级或者9级走的。那么问题来了,如果我们以及0到9级台阶的走法有x种,0到8级台阶有...

GhostintheCode的博客 1974

【动态规划之“0-1背包问题”----国王和金矿问题----C++实现】

目录问题描述(1)国王和金矿代码(1)输出(1)问题描述(2)0-1背包问题代码(2)输出(2)0-1背包 简化代码:输出: 问题描述(1)国王和金矿 描述:有一个国家发现了max_n座金矿,参与挖矿工人的总数是max_people人。每座金矿的黄金储量不同为一维数组gold[],需要参与挖掘的工人数也不同为一维数组peopleNeed[]。每座金矿要么全挖,要么不挖,不能派出一半人挖取一半金矿。要想得到尽可能多的黄金,应该选择挖取哪几座金矿? 代码(1) #include <bits/stdc+

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 806

动态规划学习-【国王和金矿】

微信公众号 题目: 有一个国家发现了5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人数也不同。参与挖矿工人的总数是10人。每座金矿要么全挖,要么不挖,不能派出一半人挖取一半金矿。要求用程序求解出,要想得到尽可能多的黄金,应该选择挖取哪几座金矿? 方法一:排列组合 每一座金矿都有挖与不挖两种选择,如果有N座金矿,排列组合起来就有2^N种选择。对所有可能性做遍历,排除那些使用工人数超...

Microstrong 1万+

国王和金矿问题.rar

本资源是一个关于 “国王和金矿问题”的 动态规划问题,C++源代码,需要的朋友可以去下载哦

动态规划:国王与金矿

题目来源 题目描述 题目解析 bok 递归 public static int climbStairs(int n) { if (n < 1){ return 0; } if (n == 1){ return 1; } if (n == 2){ ...

OceanStar的博客 2998

用金矿讲动态规划

用金矿讲动态规划,让初学者更加了解,快下载快下载快下载快下载快下载

算法之动态规划初步(Java版)

算法之动态规划初步(Java版) http://blog.youkuaiyun.com/lemon_tree12138

动态规划:求解金矿问题

题目描述: 很久很久以前,有一个国王拥有5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人人数也不相同。例如:有的金矿存储量是500kg黄金,需要5个工人来挖;有的金矿存储量是200kg黄金,需要3个工人来挖… 如果参与挖矿的工人总数是10,每座金矿要么全挖,要么不挖,不能派出一半人挖取一半的金矿,想要得到尽可能多的黄金,应该选择挖哪几座金矿? 数据信息如下: 工人:共10名 200kg黄金/3人;300kg黄金/4人;400kg黄金/5人;500kg黄金/5人;350kg黄金/3人; 求:挖哪几座金矿才

weixin_43300894的博客 557

WinCC ActiveX控件“许可证缺失”故障排查:从注册表修复到系统兼容性全解析

本文深入解析WinCC ActiveX控件报错“未找到许可证信息”的根本原因与解决方案。核心在于系统注册表中控件的设计时许可证密钥丢失或损坏。文章提供了从手动修复注册表、排查64位系统兼容性,到预防性环境部署的全流程专业指南,帮助工程师彻底解决这一常见故障。

oil88的博客 646

面试中算法(金矿)

面试中算法(金矿)

分享我的点点滴滴,在成长路上与你同行! 855

sap外币重估流程图_SAP 外币评估方法(Valuation Method,评估方法)

在FI-GL模块评估外币时(T-code:F.05),需要输入ValuationMethod。下面分解一下评估方法是如何定义的。IMG -> FI -> General LedgerAccounting ->Business Transactions ->Closing ->Valuating -> ForeignCurrency Valuation ->...

weixin_39640543的博客 2355

黑群晖二合一已损毁_手动修复黑群晖已损毁磁盘空间

lz的用法是这样的,一个中古级mac mini 2011上装有vmware esxi 7.6, 然后上面挂载了lz的华芸Asustor Nas的iscsi空间,lz用的是basic volume,然后esxi上面有虚拟的黑群晖6.2.2-24922,黑群晖的docker里跑着不可描述软件,但是发现下载速度过快时,比如有好几个文件同时下载,总速度超过60MB/s以后storage manager里很...

weixin_39669629的博客 1万+

动态规划简单例子——国王与金矿(c++)

动态规划的要点:确定全局最优解和最优子结构之间的关系,以及问题的边界。以数字的形式表达就是状态转移方程式。下面以一个例子来对他们进行描述。 问题描述: 有一个国家发现了5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人人数也不同。参与挖矿工人的总数是10人。每座金矿要么全挖,要么不挖 ,不能派出一半人挖取一半金矿。要求如何分配工人才能挖出最多的黄金。 第一座金矿含金500,需要5人;第二座金矿含金200,需要3人;第三座金矿含金300,需要4人;第四座金矿含金350,需要3人;第五座金矿含金400,需要5

会转圈的易拉罐的博客 862

超级详细的GNS3最新版3-2.2.50安装配置教程,网工速度收藏!

你好,这里是网络技术联盟站,我是瑞哥。上周给大家分享了GNS3安装包。周末的时候有小伙伴在安装的时候遇到了一些问题,瑞哥周末特地从头安装了一下GNS3,今天给大家出个安装的教程,每一步的步骤我都截图了下来,希望对大家有所帮助!

网络技术联盟站 1106

0-1背包问题金矿问题代码实现

题目:国王和金矿问题 描述:有一个国家发现了max_n座金矿,参与挖矿工人的总数是max_people人。每座金矿的黄金储量不同为一维数组gold[],需要参与挖掘的工人数也不同为一维数组peopleNeed[]。每座金矿要么全挖,要么不挖,不能派出一半人挖取一半金矿。要想得到尽可能多的黄金,应该选择挖取哪几座金矿? 功能: (1) 要求max_n、max_people、gold和ppeopleNeed均为可输入的; (2) 编写DP函数,求解答案F; (3) 编写main主函数,完成输入,调用DP函数和显

rjlmz的博客 191

Agentic AI为教育行业赋能,提示工程架构师解析应用潜力

然而,即便是最先进的 LLMs,在面对复杂、动态、需要持续规划和调整的教育场景时,也常常显得力不从心,它们更像是强大的“问答机器”,而非真正意义上的“学习伙伴”或“教学助手”。在教育场景中,传统的 AI 工具可能只能回答学生提出的特定问题,或者根据预设的规则推送一些学习材料。无论您是教育技术领域的开发者、产品经理,还是一线的教育工作者、教育管理者,抑或是对 AI 教育应用充满好奇的研究者,本文都将为您提供宝贵的 insights,助您把握 Agentic AI 时代教育创新的脉搏。

架构师的AI之路,分享AI应用开发架构的学习与实践。 466

YOLOv11 改进 - 注意力机制 | Deformable-LKA 可变形大核注意力:自适应采样网格优化特征捕捉,提升不规则目标感知

本文介绍了可变形大核注意力(D-LKA Attention)及其在YOLOv11中的结合。D-LKA Attention是一种简化的注意力机制,采用大卷积核利用体积上下文信息,通过可变形卷积灵活调整采样网格,适应多样数据模式。它有2D和3D版本,3D版本在跨深度数据理解上表现出色,共同构成了D-LKA Net架构。我们将D-LKA Attention集成进YOLOv11,在模型的检测头部分引入deformable_LKA_Attention模块。实验表明,该方法在分割任务上表现优于现有方法,提升了模型的检测

魔改工程师的博客 1170

动态规划中的背包问题(01背包)

动态规划算法中的背包问题,主要讲述01背包以及优化

水轻侮 266

基于GA-BP遗传算法优化神经网络的多输入多输出数据预测-Python代码实现

多输入多输出的GA-BP神经网络

2301_80449389的博客 2306

动态规划-国王与金矿

动态规划-国王与金矿 图文有点长,慢慢看 ———————————— 题目: 有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶。要求用程序来求出一共有多少种走法。 比如,每次走1级台阶,一共走10步,这是其中一种走法。我们可以简写成 1,1,1,1,1,1,1,1,1,1。 再比如,每次走2级台阶,一共走5步,这是另一种走法。我们可以简写成 2,2,2,2...

杨的博客 497

Qt C++ HTTP 调用通义千问大模型 X 学术论文润色工具(SCI 格式适配)

请求地址:`https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation`;| Windows | 打包时携带 `Qt6Network.dll`/`libcrypto-1_1-x64.dll` 等依赖;| Linux | 安装 `libssl-dev` 和 `libcurl4-openssl-dev`;| API 调用失败 | 检查 API-KEY 是否有效;

寒寒豆豆软件公司的博客 104

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【动态规划】国王与金矿

国王与金矿 有一个国家发现了5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人数也不同。参与挖矿工人的总数是10人。每座金矿要么全挖,要么不挖,不能派出一半人挖取一半金矿。要求用程序求解出,要想得到尽可能多的黄金,应该选择挖取哪几座金矿?(其实就是经典的背包问题,当然这个问题是来微信公众号-程序员小灰的,当然内容都是有自己思考的,他的文章中代码部分有部分错误) 500金/5人 400金/5人 200金/3人 300金/4人 350金/3人 最简单的思路还是暴力,先找出可以挖...

qq_34680987的博客 613

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

上一篇: Cracking the coding interview--Q1.8
下一篇: 动态规划——最长公共子序列问题
java_wliang
博客等级 码龄15年 19粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值