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

相关推荐
xy_optics2 分钟前
Wirtinger Flow算法的matlab实现和python实现
python·算法·matlab
怀旧,8 分钟前
【Python】3.函数与列表
java·前端·python
好奇的菜鸟14 分钟前
WSL 开发环境搭建指南:Java 11 + 中间件全家桶安装实战
java·开发语言·中间件
Python数据分析与机器学习18 分钟前
【python实战】二手房房价数据分析与预测
大数据·开发语言·python·数据挖掘·数据分析·scikit-learn·ipython
字节王德发21 分钟前
SpringMVC怎样设置JSP视图解析器才能让页面跳转更高效?
java·开发语言
hello_ejb327 分钟前
聊聊Tomato Architecture
java·spring
疯狂成瘾者33 分钟前
pycharm生成图片
ide·python·pycharm
Yan-英杰33 分钟前
【python爬虫】利用代理IP爬取filckr网站数据
开发语言·人工智能·pytorch·python·机器学习·版本匹配
灏瀚星空36 分钟前
【爬虫学习】Python数据采集进阶:从请求优化到解析技术实战
爬虫·python·学习
长勺1 小时前
Spring Boot自动装配原理
java·spring boot·后端