[蓝桥杯 2023 国 Python B] 划分 Java

java 复制代码
import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int[] arr = new int[41];
		int sum = 0;
		for (int i = 1; i <= 40; i++) {
			arr[i] = sc.nextInt();
			sum += arr[i];
		}
		sc.close();
		int target = sum / 2; // 最接近的两个数乘积最大
		long[] dp = new long[target + 1];
		for (int i = 1; i <= 40; i++) {
			for (int j = target; j >= arr[i]; j--) {
				dp[j] = Math.max(dp[j], dp[j - arr[i]] + arr[i]); // 01背包求出最接近target的数
			}
		}
		System.out.println(dp[target] * (sum - dp[target])); // 输出两组最大乘积
	}
}
java 复制代码
public class Main {
	public static void main(String[] args) {
		System.out.println(12873625444L);
	}
}

这题其实很简单,就是要分成两组,然后分别对两组求和,让求出的两个和乘积最大。假如所有数分成A和B两组,那么A和B的乘积最大值就是 ((A + B) / 2) * 2,意思就是找到一组的和最接近所有数之和的一半,也就是 (A + B) / 2,那么这它与另一组数之和相乘即可得到最大乘积。

相关推荐
veminhe9 小时前
python调用接口获取网络信息
python
泡海椒10 小时前
JQuick-Curl 二次开发:自定义解析器、扩展点开发指南,如何把框架能力真正变成团队资产
java·开发语言·okhttp·maven
Allen_LVyingbo10 小时前
医疗AI基础2026-构建可靠智能体的编程路径(上)
大数据·数据库·人工智能·python·自动化
青山木11 小时前
Hot 100 --- 数组中的第K个最大元素
java·数据结构·算法·排序算法
玛卡巴卡ldf11 小时前
【AICoding】笔试提示词设计思路
java·算法·ai编程
珍珠先生11 小时前
第10章 JDK 17 新特性:语法糖与新能力
java
Rnan-prince11 小时前
堆与TopK · 从零到通透 —— 9 节全系列复盘
python·算法
吴声子夜歌12 小时前
ApacheCommons——commons-text(模板替换与文本算法)
java·开发语言·算法·apache
Haooog12 小时前
Agent 开发中的 Memory:State、短期记忆、长期记忆与 Memory Retrieval
java·agent·memory
2601_9622946112 小时前
Python接口自动化测试实战:使用requests库
python·接口自动化测试·异常处理·requests库·api测试