题意:

给定一个长度为 \(n\) 的数组,选择它的一个子序列(不一定要连续的),问有多少种选法使得它们 AND 的值的二进制表示法中有 \(k\) 个 \(1\)。

思路:

这个题就是一个简单的 DP,

设 \(f_{i,j}\) 表示选择到了第 \(i\) 个数字(但不一定是把前 \(i\) 个数字都选择了),所有被选择的数字的 AND 值等于 \(j\) 的方案数。

那么我可以不选择这个数字:\(f_{i,j} = f_{i,j} + f_{i-1,j}\),即与选择 \(i - 1\) 个数字,数字的 AND 的值为 \(j\) 的方案数一样。

那么我们也可以选择这个数字:\(f_{i,j\& a_i} = f_{i,j\& a_i} + f_{i - 1,j}\),即从前 \(i - 1\) 个数得到的 \(j\) 与上一个 \(a_i\) 就有前 \(i\) 个数字得到的 \(j\&a_i\)。

当然,我们为什么一定要让第 \(i\) 个数字受到前面的数字的影响呢?我们可以另起炉灶!即 \(f_{i, a_i}=1\)。

这就讨论完了所有情况。

归纳总结起来就是

\[\begin{cases}
f_{i,j} = f_{i,j} + f_{i-1,j} \\
f_{i,j\& a_i} = f_{i,j\& a_i} + f_{i - 1,j} \\
f_{i, a_i}=1 \\
\end{cases}
\]

代码:

#include <bits/stdc++.h>

using namespace std;

const int N = 200010, mod = 1e9 + 7;

int f[N][64];
int n, k;
int a[N]; void solve() {
cin >> n >> k;
for (int i = 1; i <= n; i++) memset(f[i], 0, sizeof(f[i]));
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 1; i <= n; i++) {
f[i][a[i]] = 1;
for (int j = 0; j < 64; j++) {
f[i][j] = (1ll * f[i][j] + f[i - 1][j]) % mod;
f[i][j & a[i]] = (1ll * f[i][j & a[i]] + f[i - 1][j]) % mod;
}
}
int res = 0;
for (int i = 0; i < 64; i++) {
int cnt = 0;
for (int j = 0; j < 6; j++) {
if (i >> j & 1) cnt++;
}
if (cnt == k) res = (1ll * res + f[n][i]) % mod;
}
cout << res << '\n';
} int main() {
#ifdef DEBUG
freopen("Test.in", "r", stdin);
cout << "===================START===================" << endl;
#endif ios::sync_with_stdio(false);
cin.tie(nullptr); int T;
cin >> T;
while (T--) solve(); #ifdef DEBUG
cout << "====================END====================" << endl;
#endif
return 0;
}

CF1829H Don't Blame Me题解的更多相关文章

  1. Leetcode 简略题解 - 共567题

    Leetcode 简略题解 - 共567题     写在开头:我作为一个老实人,一向非常反感骗赞.收智商税两种行为.前几天看到不止两三位用户说自己辛苦写了干货,结果收藏数是点赞数的三倍有余,感觉自己的 ...

  2. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  3. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  4. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  5. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  6. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  7. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  8. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  9. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  10. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. mariabackup -prepare step on increment backup failed

    问题描述:使用mariabackup对maridb10.6.4进行物理备份,进行增量恢复的时候报错.截止到目前,还是mariadb的一个bug,还没有修复.在增备的过程中如果出现新库的建立,数据库就会 ...

  2. YII2.0的文件上传, 并把文件名称重新编译

    /** *@Action 文件上传示例 *@这里我们演示的是一个YII2.0的文件上传, 并把文件名称重新编译 *@我们上传的是一个叫 photo 的jpg和png格式的文件 */ Controlle ...

  3. CSS笔记(待完善)

    CSS笔记 css权重 ID(100)> class(10)> element(1) css最高权重 !important 块元素(block) 可以设置宽度和高度,独立成行. h1~h6 ...

  4. SRAM 测试总结

    SoC随着工艺进步设计复杂度增加,embeded sram也越来越多.在40nm SoC产品Sram一般在20Mbits左右,当工艺发展到28nm时Sram就增加到100Mbits.如果考虑AI产品, ...

  5. Spring源码系列:核心概念解析

    前言 本文旨在为读者解析Spring源码中的关键类,以便读者在深入阅读源码时,能够了解关键类的作用和用途.在阅读Spring源码时,经常会遇到一些不熟悉的概念,了解关键类的作用可以帮助读者更好地理解这 ...

  6. #Python merge函数,pandas库数据查询功能,对标V-LOOKUP

    日常办公中,我们经常会遇到需要匹配表,匹配对应数据的场景,在EXCEL中,我们习惯使用VLOOKUP函数或者是X-LOOKUP函数,今天学习的是Python,pandas库中的匹配功能. 首先导入所需 ...

  7. redis内存突然暴增,排查思路是什么

    1 这种暴增的应该还是上次一个群友说的,更多可能是外部因素导致的,应用新上线,定时任务这些,再有就是cat上查是哪些指令多,以及比对和之前的时间的差异 看是否有定时任务 或者 新上线的活动 ,在看下监 ...

  8. 2021-09-01:三数之和。给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。

    2021-09-01:三数之和.给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组. ...

  9. SRE方法论之拥抱风险

    一.系统不可能100%可靠 系统不可能100%可靠,人都不可能100%健康,更何况我们人类创造的系统?所以,任何软件系统都不应该一味地追求 100%可靠.事实证明,可靠性超过一定值后,再提高可靠性对于 ...

  10. Spring Boot 3.1中如何整合Spring Security和Keycloak

    在今年2月14日的时候,Keycloak 团队宣布他们正在弃用大多数 Keycloak 适配器.其中包括Spring Security和Spring Boot的适配器,这意味着今后Keycloak团队 ...