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

相关推荐
蓝倾9762 分钟前
小红书获取关键词列表API接口详解
开发语言·数据库·python
是小崔啊4 分钟前
【爬虫】03 - 爬虫的基本数据存储
网络·爬虫·python·beautifulsoup
二向箔reverse19 分钟前
Selenium 启动的浏览器自动退出问题分析
java·开发语言·数据库
库库林_沙琪马35 分钟前
[特殊字符] Spring Boot 常用注解全解析:20 个高频注解 + 使用场景实例
java·spring boot·后端
java1234_小锋1 小时前
【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 基于jieba实现词频统计
python·自然语言处理·flask
星期天要睡觉1 小时前
python网络爬虫(第一章/共三章:网络爬虫库、robots.txt规则(防止犯法)、查看获取网页源代码)
开发语言·爬虫·python
知其然亦知其所以然1 小时前
面试被问 G1 GC 懵了?记住这几点就能完美回答!
java·后端·面试
能工智人小辰1 小时前
二刷 黑马点评 秒杀优化
java·开发语言
杨小扩1 小时前
夯实基础:配置Java开发环境JDK与构建工具Maven
java·开发语言·maven
Gyoku Mint1 小时前
深度学习×第10卷:她用一块小滤镜,在图像中找到你
人工智能·python·深度学习·神经网络·opencv·算法·cnn