蓝桥杯---数组分割

news/2025/2/5 22:01:11/

https://www.dotcpp.com/oj/problem3171.html

测试用例分析:

2
2
6 6
2
1 6

这代表有两个测试用例。

第一测试用例:

  • 数组: [6, 6]
  • 长度: 2
分析
  • 数组中的所有元素都是偶数,因此任意组合的和都将是偶数。
  • 可能的组合及其和:
    • 空集: 和 = 0 (偶数)
    • {6}: 和 = 6 (偶数)
    • {6}: 和 = 6 (偶数)
    • {6, 6}: 和 = 12 (偶数)

在这种情况下,所有可能的子集的和都是偶数,包括空集。因此,所有四种可能的子集选择(包括空集)都符合要求。

第二测试用例:

  • 数组: [1, 6]
  • 长度: 2
分析
  • 数组中的元素和为奇数(1 + 6 = 7),不可能将数组分割成两个和都是偶数的部分。
  • 可能的组合及其和:
    • 空集: 和 = 0 (偶数)
    • {1}: 和 = 1 (奇数)
    • {6}: 和 = 6 (偶数)
    • {1, 6}: 和 = 7 (奇数)

对于这个数组,不可能找到一种分割方式,使得两个子集的和都是偶数。因此,没有符合条件的子集选择。

解释输出

根据以上分析,对于第一测试用例,所有4种子集都符合条件,输出应该是4。对于第二测试用例,因为无法将和分成两部分都是偶数,输出应该是0。

动态规划:能用动态规划解决的问题,需要满足三个条件:最优子结构,无后效性和子问题重叠。

package 真题.第十四界;import java.util.Scanner;public class _01数组分割 {static int mod = 1000000007;public static void main(String[] args) {Scanner scan = new Scanner(System.in);int t = scan.nextInt(); // 测试用例的数量while (t-- > 0) {int n = scan.nextInt(); // 数组的长度long sum = 0; // 用于计算数组元素的总和long[] a = new long[n + 1]; // 存储数组元素for (int i = 1; i <= n; i++) {a[i] = scan.nextLong();sum += a[i]; // 累加求总和}// 如果总和是奇数,无法分割成两个和都为偶数的子集if (sum % 2 == 1) {System.out.println(0);continue;}long[][] dp = new long[n + 1][2]; // 动态规划数组dp[0][0] = 1; // 一个元素也不取时,偶数和为0的方案数是1dp[0][1] = 0; // 一个元素也不取时,奇数和的方案数是0for (int i = 1; i <= n; i++) {if (a[i] % 2 == 0) { // 当前元素为偶数dp[i][0] = (dp[i - 1][0] * 2) % mod; // 偶数加偶数还是偶数dp[i][1] = (dp[i - 1][1] * 2) % mod; // 偶数加奇数还是奇数} else { // 当前元素为奇数dp[i][0] = (dp[i - 1][0] + dp[i - 1][1]) % mod; // 奇数加偶数变奇数,奇数加奇数变偶数dp[i][1] = (dp[i - 1][0] + dp[i - 1][1]) % mod; // 同上,反向}}System.out.println(dp[n][0]); // 输出偶数和的方案数}}
}

http://www.ppmy.cn/news/1423385.html

相关文章

数据结构书后习题

p17 1&#xff0c; 个人解答&#xff1a; int DeleteMinElem(SqList &L,int &min) {int j 0;if (L.length 0){printf("error!");return 0;}int min L.data[0];for (int i 1; i < L.length; i){if (L.data[i] < min){min L.data[i];j i;}}L.dat…

图像分割:Pytorch实现UNet++进行医学细胞分割

图像分割&#xff1a;Pytorch实现UNet进行医学细胞分割 前言相关介绍项目结构具体步骤准备数据集读取数据集设置并解析相关参数定义网络模型定义损失函数定义优化器训练验证 参考 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩内容&#x…

MySQL高负载排查方法最佳实践(15/16)

高负载排查方法 CPU占用率过高问题排查 使用mpstat查看cpu使用情况。 # mpstat 是一款 CPU 性能指标实时展示工具 # 能展示每个 CPU 核的资源视情况&#xff0c;同时还能将资源使用情况进行汇总展示 # 如果CPU0 的 %idle 已经为 0 &#xff0c;说明此核已经非常繁忙# 打印所…

网络基础-基于TCP协议的Socket通讯

一、Socket通讯基于TCP协议流程图 UDP 的 Socket 编程相对简单些不在介绍。 二、 服务端程序启动 服务端程序要先跑起来&#xff0c;然后等待客户端的连接和数据。 服务端程序首先调用 socket() 函数&#xff0c;创建网络协议为 IPv4&#xff0c;以及传输协议为 TCP 的…

将Ubuntu18.04默认的python3.6升级到python3.8

1、查看现有的 python3 版本 python3 --version 2、安装 python3.8 sudo apt install python3.8 3、将 python3.6 和 3.8 添加到 update-alternatives sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1 sudo update-alternatives --insta…

AIDE:自动驾驶目标检测的自动数据引擎

AIDE&#xff1a;自动驾驶目标检测的自动数据引擎 摘要IntroductionRelated WorksMethodData FeederModel Updater4 Experiments 摘要 自动驾驶车辆&#xff08;AV&#xff09;系统依赖于健壮的感知模型作为安全保证的基石。然而&#xff0c;道路上遇到的物体表现出长尾分布&a…

2024-4-18 群讨论:关于异步HttpClient如何测试验证

以下来自本人拉的一个关于 Java 技术的讨论群。关注公众号&#xff1a;hashcon&#xff0c;私信进群拉你 群友问题&#xff1a;群友想尽量快的将请求发到三方接口&#xff0c;不考虑三方接口的压力。如何开发并验证&#xff1f; 思路&#xff1a; 肯定要使用 WebClient 这种…

未来计算机的发展趋势是什么?

未来计算机的发展趋势是多方面的,涵盖了硬件、软件、体系结构以及计算范式等多个层面。以下是一些预期的趋势: 1. 量子计算: 随着量子理论的不断成熟和技术的进步,量子计算机将可能解决传统计算机难以处理的问题,比如药物发现、材料科学、复杂系统模拟等领域。量子计算的…