[蓝桥杯 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,那么这它与另一组数之和相乘即可得到最大乘积。

相关推荐
m0_748554817 小时前
golang如何实现用户订阅偏好管理_golang用户订阅偏好管理实现总结
jvm·数据库·python
lee_curry7 小时前
第四章 jvm中的垃圾回收器
java·jvm·垃圾收集器
smj2302_796826527 小时前
解决leetcode第3911题.移除子数组元素后第k小偶数
数据结构·python·算法·leetcode
阿正呀8 小时前
Redis怎样实现本地缓存的高效失效通知
jvm·数据库·python
九转成圣8 小时前
Java 性能优化实战:如何将海量扁平数据高效转化为类目字典树?
java·开发语言·json
2501_901200538 小时前
mysql如何设置InnoDB引擎参数_优化innodb_buffer_pool
jvm·数据库·python
_.Switch8 小时前
东方财富股票数据JS逆向:secids字段和AES加密实战
开发语言·前端·javascript·网络·爬虫·python·ecmascript
Mr_sst8 小时前
Claude Code 部署与使用保姆级教程(2026 最新)
python·ai
直奔標竿8 小时前
Java开发者AI转型第二十七课!Spring AI 个人知识库实战(六)——全栈闭环收官,解锁前端流式渲染终极技巧
java·开发语言·前端·人工智能·后端·spring
瞎某某Blinder8 小时前
DFT学习记录[6]基于 HES06的能带计算+有效质量计算
python·学习·程序人生·数据挖掘·云计算·学习方法