ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

蓝桥杯2020年第十一届JavaB组真题题目+解析+代码+答案:4.分配口罩

2020-12-02 14:31:59  阅读:1056  来源: 互联网

标签:组真题 JavaB res 口罩 long 蓝桥 医院 static public


不要自卑,去提升实力
互联网行业谁技术牛谁是爹
如果文章可以带给你能量,那是最好的事!请相信自己
加油o~

蓝桥杯历届真题题目+解析+代码+答案(2013-2020)(JavaA、B、C组)

问题描述:

某市市长获得了若干批口罩,给定每批口罩的数量,
市长要把口罩分配给市内的 2 所医院,由于物流限制,每一批口罩只能全部分配给其中一家医院。
市长希望 2 所医院获得的口罩总数之差越小越好。 请你计算这个差最小是多少?
答案提交
这是一道结果填空题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

解题思路:

  • 本题是一个典型的递归问题(多路径问题)
  • dfs函数的三个参数分别为 k、sum1、sum2
    k代表正在处理数字的下标
    sum1为1号医院的口罩数量
    sum2位2号医院的口罩数量
  • 当k=15时,说明所有口罩全部分配完成,此时要确定最小值和当前两个医院数量的差值
  • 函数体中处理的是不同路径
    第一个是给1号医院分配
    第二个是给2号医院分配
  • 经过多次递归回溯,会计算出所有分配情况的最小值

代码:

public class Main {
	public static long res=Long.MAX_VALUE;
	public static long num[]={9090400, 8499400, 5926800, 8547000, 4958200,
			   				  4422600, 5751200, 4175600, 6309600, 5865200, 
			   				  6604400, 4635000, 10663400, 8087200, 4554000
							}; 
    public static void main(String[] args){
    	dfs(0, 0, 0);
    	System.out.println(res);
	}
    public static void dfs(int k,long sum1,long sum2 ) {
    	if(k==15) {
    		res=res<Math.abs(sum1-sum2)?res:Math.abs(sum1-sum2);
    		return;
    	}
    	dfs(k+1, sum1+num[k], sum2);
    	dfs(k+1, sum1, sum2+num[k]);
    }
}

答案:

2400

标签:组真题,JavaB,res,口罩,long,蓝桥,医院,static,public
来源: https://blog.csdn.net/m0_47256162/article/details/110479953

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有