当前位置: 首页 > news >正文

[蓝桥杯 2023 国 Python B] 划分 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])); // 输出两组最大乘积}
}
public class Main {public static void main(String[] args) {System.out.println(12873625444L);}
}

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

http://www.dtcms.com/a/167484.html

相关文章:

  • 【Unity】MVP框架的使用例子
  • Http详解
  • AI日报 · 2025年05月01日|DeepSeek 发布新一代定理证明模型 Prover V2
  • 【数据结构】 复杂度
  • 2025五一杯数学建模竞赛选题建议+初步分析
  • OpenGL-ES 学习(9) ---- OpenGL-ES 简介和基本 Pipeline
  • 专题二十一:无线局域网——WLAN
  • Python地图绘制模块cartopy入门
  • Java学习手册:Spring 数据访问
  • PostgreSQL数据类型
  • 面试中系统化地解答系统设计题:通用方法论
  • 向量数据库和关系型数据库的区别,优点,缺点和典型应用场景
  • Linux安全清理删除目录bash脚本
  • 从零到一构建数据科学全流程实战:最新技术与企业级开发
  • Python:Python3 异常和文件
  • Rerank详解
  • 【CF】Day48——Codeforces Round 979 (Div. 2) D
  • 数字智慧方案5981丨智慧农业解决方案(55页PPT)(文末有下载方式)
  • 2024年12月 C/C++(二级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 开始一个vue项目
  • Android 移动开发:ProgressBar (水平进度条)
  • 第十一届蓝桥杯 2020 C/C++组 门牌制作
  • DeepSeek V3 架构创新:大规模MoE与辅助损失移除
  • Java面试高频问题(31-33)
  • PDF24 Tools:涵盖20+种PDF工具,简单高效PDF工具箱,支持一键编辑/转换/合并
  • 【论文阅读26】贝叶斯-滑坡预测-不确定性
  • 当算力遇上堵车:AI如何让城市血管不再“血栓”?
  • 范围for 和 万能引用
  • 8.进程概念(四)
  • 【java WEB】恢复补充说明