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

数组划分使元素总和最接近

0划分 - 蓝桥云课

将一个数组划分为两个元素总和最接近的两个数组

要使得两组权值的乘积最大,根据数学原理,当两组权值越接近时,它们的乘积就越大。因此,可以将这个问题转化为一个 0 - 1 背包问题,把所有数的总和的一半当作背包的容量,通过动态规划的方法来找出最接近这个容量的一组数的和,进而确定另一组数的和,最终计算出两组权值的乘积

此处使用滚动数组

public class Main {
    public static void main(String[] args) {
        int[] nums=new int[]{5160,9191,6410,4657,7492,1531,8854,1253,4520,9231,1266,4801,3484,4323,5070,1789, 2744, 5959, 9426, 4433,
                4404, 5291 ,2470 ,8533, 7608 ,2935 ,8922 ,5273 ,8364 ,8819, 7374, 8077 ,5336 ,8495 ,5602, 6553, 3548, 5267, 9150 ,3309};
        long sum=0;
        for(int i:nums){
            sum+=i;
        }
        long target=sum/2;
        int[] dp=new int[(int) (target+1)];
        for (int i = 0; i <nums.length; i++) {
            for (int j = (int) target; j>=nums[i]; j--){
                dp[j]=Math.max(dp[j],dp[j-nums[i]]+nums[i]);
            }
        }
        long ans=(sum-dp[(int) target])*dp[(int) target];
        System.out.println(ans);
    }
}

相关文章:

  • 如何迁移 GitHub 仓库到 GitLab?
  • 最新版PhpStorm超详细图文安装教程,带补丁包(2025最新版保姆级教程)
  • 三类人解决困境的方法
  • 【项目管理】第5章 信息系统管理 --知识点整理
  • Oracle 表空间高水位收缩全攻略
  • Ubuntu 22.04 AI大模型环境配置及常用工具安装
  • 消息队列(Message Queue)简介
  • AIGC2——AI生成艺术的边界与伦理:艺术性、版权与美学价值的争议
  • 学习海康VisionMaster之多直线查找
  • 使用python访问mindie部署的vl多模态模型
  • 【数据结构】二叉搜索树
  • Android Input——输入子系统(三)
  • C++ Primer Plus 编程练习题 第六章 分支语句和逻辑运算符
  • 544 eff.c:1761处loop vect 分析
  • C++ 基本语法
  • C#/.NET/.NET Core技术前沿周刊 | 第 33 期(2025年4.1-4.6)
  • 【动态规划】 深入动态规划 回文子串问题
  • 浅谈Apache
  • 汉得企业级 PaaS 平台 H-ZERO 1.12.0 发布!四大维度升级,构建企业数字化新底座
  • STL c++ list——模拟实现
  • 浙江一教师被指殴打并威胁小学生,教育局通报涉事人被行拘
  • 江南考古文脉探寻
  • 世界数字教育大会发布“数字教育研究全球十大热点”
  • 查幽门螺杆菌的这款同位素长期被海外垄断,秦山核电站实现突破
  • 上海虹桥国际咖啡文化节开幕,推出茶咖文化特色街区、宝妈咖啡师培训
  • 不是10点!乌克兰官员称尚未就俄乌谈判开始时间达成一致