欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > [蓝桥杯 2023 国 Python B] 划分 Java

[蓝桥杯 2023 国 Python B] 划分 Java

2025/5/6 16:36:04 来源:https://blog.csdn.net/2301_76683370/article/details/147657295  浏览:    关键词:[蓝桥杯 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,那么这它与另一组数之和相乘即可得到最大乘积。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词