【题解】分配口罩
【问题描述】
某市市长获得了若干批口罩,给定每批口罩的数量,
市长要把口罩分配给市内的 2 所医院,由于物流限制,每一批口罩只能全部分配给其中一家医院。
市长希望 2 所医院获得的口罩总数之差越小越好。 请你计算这个差最小是多少?
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
【解题思路】
本题是一个典型的递归问题(多路径问题),
DFS函数的三个参数分别为 index、hp1、hp2,
当index=15时,说明所有口罩全部分配完成,此时要确定最小值和当前两个医院数量的差值。函数体中处理的是不同路径,
第一个是给1号医院分配,
第二个是给2号医院分配,
经过多次递归回溯,会计算出所有分配情况的最小值。
【代码】
public class topic04 {
public static long res = Long.MAX_VALUE; //初始化为最大值
public static long[] arr = {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);
}
/**
* 深度优先遍历
* @param index: 代表正在处理数字的下标
* @param hp1: 给1号医院分配
* @param hp2: 给2号医院分配
*/
static void DFS(int index, long hp1, long hp2) {
if (index == 15) {
//递归出口
res = Math.min(res, Math.abs(hp1 - hp2));
return;
}
DFS(index + 1, hp1 + arr[index], hp2);
DFS(index + 1, hp1, hp2 + arr[index]);
}
}
结果
2400
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?