数组分割

题目

问题描述
小蓝有一个长度为 N 的数组 A = [A0, A1, . . .,AN−1]。现在小蓝想要从 A 对应的数组下标所构成的集合 I = {0, 1, 2, . . . , N − 1} 中找出一个子集 R1,那么 R1在 I 中的补集为 R2。记 S1 = ∑ r ∈ R1 Ar,S2 = ∑ r ∈ R2 Ar,我们要求 S1 和 S2 均为偶数,请问在这种情况下共有多少种不同的 R1。当 R1 或 R2 为空集时我们将S 1 或 S 2 视为 0。
输入格式
第一行一个整数 T,表示有 T 组数据。
接下来输入 T 组数据,每组数据包含两行:第一行一个整数 N,表示数组A 的长度;第二行输入 N 个整数从左至右依次为 A0, A1, . . . , AN−1,相邻元素之间用空格分隔。
输出格式
对于每组数据,输出一行,包含一个整数表示答案,答案可能会很大,你需要将答案对 1000000007 进行取模后输出。

样例输入
2
2
6 6
2
1 6

样例输出
4
0

样例说明
对于第一组数据,答案为 4。(注意:大括号内的数字表示元素在数组中的下标。)
R1 = {0}, R2 = {1};此时 S 1 = A0 = 6 为偶数, S 2 = A1 = 6 为偶数。
R1 = {1}, R2 = {0};此时 S 1 = A1 = 6 为偶数, S 2 = A0 = 6 为偶数。
R1 = {0, 1}, R2 = {};此时 S 1 = A0 + A1 = 12 为偶数, S 2 = 0 为偶数。
R1 = {}, R2 = {0, 1};此时 S 1 = 0 为偶数, S 2 = A0 + A1 = 12 为偶数。
对于第二组数据,无论怎么选择,都不满足条件,所以答案为 0。
评测用例规模与约定
对于 20% 的评测用例,1 ≤ N ≤ 10。
对于 40% 的评测用例,1 ≤ N ≤ 102。
对于 100% 的评测用例,1 ≤ T ≤ 10, 1 ≤ N ≤ 103, 0 ≤ Ai ≤ 109。

思路

这题我们使用动态规划dp(动态规划关键在两点;a, 怎么表示状态 b,怎么表示状态之间的关系),解决问题,dp[i][0] 表示前i个元素中子集和为偶数的个数而dp[i][1]表示前i个元素中子集和为奇数的个数(a),从i从1开始遍历arr[i] 是否要加入,当arr[i]为偶数时(因为加不加奇偶性不会发生改变)则dp[i+1][0] = dp[i][0]*2 ,dp[i+1][1] = dp[i][1]*2 , 当arr[i]为奇数(可以改变奇偶性)时dp[i+1][0]和dp[i+1][1]都是dp[i][0]+dp[i][1] ,因为对于dp[i+1][0] dp[i][0]都是偶数表示不加arr[i]时原来的的与dp[i][1]都是奇数表示加 arr[i]变成偶数了,dp[i+1][0] 同理

代码

#include<bits/stdc++.h>
using  namespace std;
const int N = 1010;
long long arr[N];
long long dp[N][2];//表示前i个数的 dp[i][0]表示子集和为偶数的数量 dp[i][1]表示子集和为奇数的数量
long long t,n;
long long mod = 1e9+7;
int main()
{cin>>t;while(t--){cin>>n;memset(arr,0,sizeof(arr));memset(dp,0,sizeof(dp));long long sum = 0;for(int i = 0;i < n;i++){cin>>arr[i];sum += arr[i];}if(sum %2 == 1){cout<<0<<endl;continue;}else{dp[0][0] = 1,dp[0][1] = 0;for(int i = 0;i < n;i++){if(arr[i] %2 == 0){//arr[i] 是偶数,那么无论我们是否选取它,子集的和的奇偶性都不会改变dp[i+1][0] = dp[i][0]*2%mod;dp[i+1][1] = dp[i][1]*2%mod;}else{//arr[i]是奇数 分为选和不选 选 那么前一个的子集+当前数 的奇偶会发生改变dp[i+1][0] = dp[i][0]+dp[i][1]%mod;dp[i+1][1] = dp[i][0]+dp[i][1]%mod;}}cout<<dp[n][0]%mod<<endl;}}return 0;
}

总结

  • 动态规划关键在两点;a, 怎么表示状态 b,怎么表示状态之间的关系
  • 注意dp数组要初始化和有的要设置初始值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/794141.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

职场迷航?MBTI测试为你指明方向,找到最匹配的职业!

MBTI简介 MBTI的全名是Myers-Briggs Type Indicator。它是一种迫选型、自我报告式的性格评估工具&#xff0c;用以衡量和描述人们在获取信息、作出决策、对待生活等方面的心理活动规律和性格类型。 类型指标 美国的凯恩琳布里格斯和她的女儿伊莎贝尔布里格斯迈尔斯研制了迈尔…

归类一些vim的插件,需要时来看

本文结构&#xff1a; a、简介 b、一些插件名称及简要介绍 a、之前我一篇文章说了在vim中安装了一个可以自动补全")",">"等符号的插件autopairs,里面也有详细的安装及配置步骤。基于有些小伙伴想要了解些别的vim插件和自己有时候可能会有些灵感想要写…

开发环境->生产环境

1、数据迁移 不涉及docker # 以数据库用户导出数据 mysqldump -h 192.168.1.168 -P 3307 -u abragent -pabragebb17 abragent > abragent.sql# 以root用户导出数据 mysqldump -h 192.168.1.168 -P 3307 -u root -p8d3Ba1b abragent > abragent.sql 涉及docker …

递归算法练习

递归算法是所有算法中较难的一种&#xff0c;依靠他代码的简洁和清晰地逻辑很受人们喜欢&#xff0c;但是新手入门递归还是会被他不同寻常的思路吓到&#xff0c;其实面对递归问题我们只需要看清题目&#xff0c;分析出要求&#xff0c;有清晰的解题思路&#xff0c;只要仔细分…

十九、Rust Tcp Rpc 示例

前一篇&#xff0c;我们演示了 rust grpc 的应用&#xff0c;但 grpc 是基于 http 的&#xff0c;按理说其协议更重&#xff0c;同时也确见到网友验证过&#xff0c;相比 http 的 rpc&#xff0c;tpc 下的 rpc 性能确实更有优势。 同时&#xff0c;不同于 grpc 要编写一份 “中…

系统分析师-综合知识-应用数学与经济管理

系统分析师-综合知识-应用数学与经济管理 更多软考资料 https://ruankao.blog.csdn.net/ 文章目录 系统分析师-综合知识-应用数学与经济管理概述最小生成树真题-给出图真题-给出表 最短路径关键路径关键路径基本关键路径升级 网络与最大流量指派问题最小解最大解 线性规划决策…

软考--软件设计师(软件工程总结2)

目录 1.测试方法 2.软件项目管理 3.软件容错技术 4.软件复杂性度量 5.结构化分析方法&#xff08;一种面向数据流的开发方法&#xff09; 6.数据流图 1.测试方法 软件测试&#xff1a;静态测试&#xff08;被测程序采用人工检测&#xff0c;计算机辅助静态分析的手段&…

虚拟机打不开

问题 另一个程序已锁定文件的一部分&#xff0c;进程无法访问 打不开磁盘“G:\centeros\hadoop104kl\hadoop100-cl2.vmdk”或它所依赖的某个快照磁盘。 模块“Disk”启动失败。 未能启动虚拟机。 原因 前一次非正常关闭虚拟机导致.lck 文件是VMWare软件的一种磁盘锁文件&…

蓝桥杯算法题:外卖店优先级

“饱了么”外卖系统中维护着 N 家外卖店&#xff0c;编号 1∼N。每家外卖店都有一个优先级&#xff0c;初始时 (0时刻) 优先级都为 0。每经过 1个时间单位&#xff0c;如果外卖店没有订单&#xff0c;则优先级会减少 1&#xff0c;最低减到 0&#xff1b;而如果外卖店有订单&am…

特定领域软件体系结构

1.DSSA的定义 简单地说&#xff0c;DSSA&#xff08;Domain Specific Software Architecture&#xff09;就是在一个特定应用领域中为一组应用提供组织结构参考的标准软件体系结构。 从功能覆盖的范围的角度有两种理解DSSA中领域的含义的方式&#xff1a; &#xff08;1&#x…

使用Python写简单的点云高斯滤波

一、代码 Python import numpy as np import open3d as o3ddef apply_gaussian_filter(pcd, k=30, sigma=1.0):"""对点云应用高斯滤波。参数:pcd (open3d.geometry.PointCloud): 输入的点云。k (int): 每个点的邻居数量。sigma (float): 高斯核的标准差。返回…

极海APM32电机驱动板记录(二)

文章目录 1、解除写保护2、极海驱动板资源概述3、新建工程4、点灯5、嘀嗒定时器6、中断7、串口打印8、adc读取9、i2c尝试10、定时器测试11、电机驱动pwm测试 上一篇文章算是简单了解了一下极海的板子开发环境吧&#xff0c;结果前几天板子来了&#xff0c;然后发现一个大bug&am…

12、高精度加法(含源码)

高精度加法 难度&#xff1a;简单 题目描述 给定两个正整数&#xff0c;计算它们的和 输入格式 共两行&#xff0c;每行包含一个整数。 输出格式 共一行&#xff0c;包含所求的和。 数据范围&#xff1a; 1≤整数长度≤100000输入样例&#xff1a; 12 23输出样例&…

继承 多态 接口 抽象

继承&#xff1a; 继承需要我们学习的点&#xff1a; 什么是继承&#xff0c;继承的好处继承的特点子类到底能继承父类的那些内容&#xff1f;继承中&#xff1a;成员变量的访问特点继承中&#xff1a;成员方法的访问特点继承中&#xff1a;构造方法的特点This,super使用总结…

2024.3.15力扣每日一题——卖木头块

2024.3.15 题目来源我的题解方法一 记忆化搜索&#xff08;自顶向下&#xff09;方法二 动态规划&#xff08;自底向上&#xff09; 题目来源 力扣每日一题&#xff1b;题序&#xff1a;2312 我的题解 方法一 记忆化搜索&#xff08;自顶向下&#xff09; 用 f(x,y)表示当木…

firefox切换本地服务和全球服务的方法

方法1&#xff1a;“设置”>“同步">“切换全球/本地服务器” https://jingyan.baidu.com/article/1974b2898523bbb5b1f774e2.html 方法2&#xff1a;地址栏输入about:config&#xff0c;搜索首选项名称里输入identity.fxaccounts.autoconfig.uri&#xff0c;填入…

Docker Desktop 不支持 host 网络模式

先把这个结论的放在前面&#xff0c;直接访问链接就能看到官方文档中已经明确说了不支持。 参考链接&#xff1a;docker desktop for windows 不支持 host 网络模式 以前对于 docker 的网络模式&#xff0c;一直只是了解&#xff0c;没有亲自尝试过。结果今天在尝试 docker 的 …

react 父子组件的渲染机制 | 优化手段

文章目录 父子组件的渲染机制优化手段与实践写法父组件&#xff1a;下发stateprops.children 传递无状态组件props传递组件 React.memo缓存子组件与useCallback结合 父子组件的渲染机制 渲染分初次渲染和重新渲染 React组件会在两种情况下发生重新渲染 当组件自身的state发生…

如何同时安全高效管理多个谷歌账号?

您的业务活动需要多个 Gmail 帐户吗&#xff1f;出海畅游&#xff0c;Gmail账号是少不了的工具之一&#xff0c;可以关联到Twitter、Facebook、Youtube、Chatgpt等等平台&#xff0c;可以说是海外网络的“万能锁”。但是大家都知道&#xff0c;以上这些平台注册多账号如果产生关…

蓝桥集训之垒骰子

蓝桥集训之垒骰子 核心思想&#xff1a;矩阵乘法 f[i]存顶面数值 构造a矩阵 使得*f[i] f[i-1]a 则f[i] f[1] * an 快速幂优化 #include <iostream>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;const int N 6,m…