蓝桥杯历年真题值DFS

2020年分配口罩

【问题描述】

某市市长获得了若干批口罩,每一批口罩的数目如下:(如果你把以下文字复制到文本文件中,请务必检查复制的内容是否与文档中的一致。在试题目录下有一个文件 mask.txt,内容与下面的文本相同)

9090400

8499400

5926800

8547000

4958200

4422600

5751200

4175600

6309600

5865200

6604400

4635000

10663400

8087200

4554000

现在市长要把口罩分配给市内的 2 所医院。由于物流限制,每一批口罩只能全部分配给其中一家医院。市长希望 2 所医院获得的口罩总数之差越小越好。请你计算这个差最小是多少?

【答案提交】

这是一道结果填空题。

我最开始以为需要把这些口罩都分给两所医院,但不是,求分的口罩数的差值最小就可以。

代码:

java 复制代码
	import java.util.Scanner;
public class Main {

	//分配口罩
		static int[] arr = new int[15];
		static int sum = 0;
		static int cha = 0x3f3f3f3f;
		public static void main(String[] args) {
			Scanner sc  =  new Scanner(System.in);
			//将口罩数目从键盘录入
			for(int i = 0; i < 15; i++) {
				arr[i] = sc.nextInt();
			}
			//将口罩的总数目算出来
			for(int i = 0; i < 15; i++) {
				sum += arr[i];
			}
			
			dfs(0,0);//深度优先遍历,每一层和口罩的值
			System.out.println(cha);
		}
		//dfs
		public static void dfs(int d, int v) {
			//先写递归的终止条件
			if(d == 15) cha = Math.min(cha, Math.abs(sum - v - v));
			else {
				dfs(d + 1, v + arr[d]);
				dfs(d + 1, v);
			}
		}
}

注意的几点:

1.若是找到比cah小的则更新cha ,所以cha不能太小,我们定义为0x3f3f3f3f,表示整形范围内一个无穷大的数。

2.递归退出时,我们算cha值,在cha和sum-两批口罩取一个较小的值

3.递归遍历的时候,层数更深,是层数!!!

相关推荐
程序员三藏12 小时前
软件测试之单元测试
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
是乐谷15 小时前
阿里招AI产品运营
人工智能·程序人生·面试·职场和发展·产品运营·求职招聘
墨染点香18 小时前
LeetCode 刷题【31. 下一个排列】
算法·leetcode·职场和发展
想要AC的sjh20 小时前
【Leetcode】904. 水果成篮
算法·leetcode·职场和发展
21 小时前
LeetCode Hot 100 买卖股票的最佳时机
算法·leetcode·职场和发展
蒟蒻小袁1 天前
力扣面试150题--加一
算法·leetcode·职场和发展
qiuyunoqy1 天前
蓝桥杯算法之搜索章 - 2
算法·蓝桥杯·深度优先
weisian1511 天前
力扣经典算法篇-43-全排列(经典回溯问题)
算法·leetcode·职场和发展
蒋星熠1 天前
最长连续序列(每天刷力扣hot100系列)
c语言·数据结构·c++·算法·leetcode·职场和发展·哈希算法
恣艺2 天前
LeetCode 135:分糖果
算法·leetcode·职场和发展