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

相关推荐
niuge No.114 分钟前
mindyolo填坑
python
帮帮志15 分钟前
Python-pandas-操作Excel文件(读取数据/写入数据)及Excel表格列名操作详细分享
python·excel·pandas
xll_0071 小时前
使用Python在excel里创建柱状图
python·excel
AI Echoes2 小时前
大模型(LLMs)加速篇
人工智能·python·算法·机器学习·面试
碎梦归途3 小时前
23种设计模式-行为型模式之状态模式(Java版本)
java·jvm·设计模式·状态模式·软考·软件设计师·行为模式
豆沙沙包?5 小时前
2025年- H16-Lc124-169.多数元素(技巧)---java版
java·开发语言
zhangxueyi5 小时前
Java实现基数排序算法
java·数据结构·算法
闲人编程6 小时前
猜数字游戏:从数学原理到交互体验的完整设计指南
python·游戏·交互·内存管理·猜数字·智能辅导·游戏二分查找
肖永威7 小时前
VSCode开发调试Python入门实践(Windows10)
ide·vscode·python
Another Iso7 小时前
同时启动俩个tomcat压缩版
java·tomcat