【每日一题】33. 简单瞎搞题 (滚动数组 + bitset 优化DP)
补题链接:Here
这个问题的难点在于如何统计出所有和可能出现的情况,并且不能重复。
很容易想到用桶去存储每一个数,即某个和能够组合出来则为1,否则为0
不妨令 \(dp[i][j]\) 表示为第 \(i\) 次选择时,和为 \(j\) 的情况是否出现过
但是内存方面需要 \(1e8\) 的 \(int\) 内存,显然是不可接受的
那么我们考虑用 \(bitset\) 优化内存,由递推方程:\(dp_i = dp_{i}|=(dp_{i-1}<<(j*j))\)
代表第 \(i\) 次选择的时候是否能从当前状态转移到和为\(j\) 的状态
const int N = 110;
bitset<1000010>dp[N];
void solve() {
int n; cin >> n;
dp[0] = 1;
for (int i = 1, l, r; i <= n; ++i) {
cin >> l >> r;
for (int j = l; j <= r; ++j)dp[i] |= (dp[i - 1] << (j * j));
}
cout << dp[n].count() << "\n";
}
写完状态转移方程发现 \(dp_i\) 仅与 \(dp_{i - 1}\) 有关系,所以由滚动数组来节省空间
bitset<1000010> now, nxt;
void solve() {
int n; cin >> n;
now[0] = 1;
for (int i = 1, l, r; i <= n; ++i) {
cin >> l >> r;
for (int j = l; j <= r; ++j)
if (j == l)nxt = (now << (j * j));
else nxt |= (now << (j * j));
now = nxt;
}
cout << now.count() << "\n";
}
【每日一题】33. 简单瞎搞题 (滚动数组 + bitset 优化DP)的更多相关文章
- 【ACM算法竞赛日常训练】DAY2题解与分析【比赛】【数学考试】【简单瞎搞题】
DAY2共三题: 比赛(概率) 数学考试(前缀和与思维) 简单瞎搞题(dp) 视频讲解:https://www.bilibili.com/video/BV1hP411o7RD/ 作者:Eriktse ...
- 牛客练习赛22 简单瞎搞题(bitset优化dp)
一共有 n个数,第 i 个数是 xi xi 可以取 [li , ri] 中任意的一个值. 设 ,求 S 种类数. 输入描述: 第一行一个数 n. 然后 n 行,每行两个数表示 li,ri. 输出 ...
- 简单瞎搞题(bitset的操作)
链接:https://www.nowcoder.com/acm/contest/132/C来源:牛客网 题目 一共有 n个数,第 i 个数是 xi xi 可以取 [li , ri] 中任意的一个值. ...
- 牛客练习赛22 C 简单瞎搞题
//位运算 // & 都是1 才是 1 // | 都是0 才是0 // ^ 不一样才是1 #include <iostream> #include <cstdio> # ...
- 牛客 132C 简单瞎搞题 (bitset)
大意: 给定序列$a$的第$i$个元素的取值范围$[L_i,R_i]$, 求$a$的平方和的种类数. 用bitset优化, 复杂度$O(\frac{n^5}{\omega})$ #include &l ...
- HDU 4923 Room and Moor(瞎搞题)
瞎搞题啊.找出1 1 0 0这样的序列,然后存起来,这样的情况下最好的选择是1的个数除以这段的总和. 然后从前向后扫一遍.变扫边进行合并.每次合并.合并的是他的前驱.这样到最后从t-1找出的那条链就是 ...
- B. Salty Fish Go! -期望题(瞎搞题)
链接:https://www.nowcoder.com/acm/contest/104/B来源:牛客网 题意:A few days ago, WRD was playing a small game ...
- 【瞎搞题】gym226123 L. For the Honest Election
http://codeforces.com/gym/226123/problem/L 题解:手摸几组数据,发现一个规律:将n 质因数分解,答案就是 每个质因数/2+1后再乘起来. 然后考虑2的情况: ...
- hdu 4576 (简单dp+滚动数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4576 题意:给出1~n的环,m个操作,每次能顺时针或逆时针走w步,询问最后在l~r这段区间内概率.(1 ...
- 简单的算法题, Find Minimum in Rotated Sorted Array 的Python实现。
简单的算法题, Find Minimum in Rotated Sorted Array 的Python实现. 题目: Suppose a sorted array is rotated at som ...
随机推荐
- @Async实现异步任务
1.@Async是SpringBoot自带的一个执行步任务注解 @EnableAsync // 开启异步 @SpringBootApplication public class Application ...
- Go 语言学习指南:变量、循环、函数、数据类型、Web 框架等全面解析
学习基础知识 掌握 Go 语言的常见概念,如变量.循环.条件语句.函数.数据类型等等.深入了解 Go 基础知识的好起点是查阅 Go 官方文档 文章链接:Go 编程语言详解:用途.特性.与 Python ...
- 从Redis读取.NET Core配置
在本文中,我们将创建一个自定义的.NET Core应用配置源和提供程序,用于从Redis中读取配置.在此之前,您需要稍微了解一些.NET Core配置提供程序的工作原理,相关的内容可以在Microso ...
- 中企网安信息科技:数据防泄密DLP管理系统概述
由华企网安总公司北京中企网安信息科技有限责任公司开发的<数据防泄密DLP管理系统>,获得国家版权局颁发的计算机软件著作权登记证书. 数据防泄密DLP管理系统是用于保护.监控和管理敏感数据的 ...
- 如何实现CesiumJS的视效升级?
CesiumJS作为一款强大的地理可视化引擎,为我们提供了丰富的地球数据可视化和交互展示的能力.然而,随着用户需求的不断增加和技术的不断进步,如何进一步提升CesiumJS的视觉效果成为了一个重要的问 ...
- NetSuite 开发日记:批量增删改
一.批量插入/创建 使用 record.create() 插入数据时,一次只能插入一条,有多条数据需要插入时只能通过循环的方式,这样效率非常慢,耗时会随着数据量的增大而呈线性增长,有一种巧妙的方式可以 ...
- stackoverflow怎么解决
stackoverflow怎么解决 栈溢出的可能原因: 函数递归调用层次过深 ,每调用一次,函数的参数.局部变量等信息就压一次栈,并且没有及时出栈. 局部变量体积太大 分析:每一个 JVM 线程都拥有 ...
- 未能加载文件或程序集“*****.dll”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。(异常来自HRESULT:0x80131040)
问题描述: 未能加载文件或程序集"*****.dll"或它的某一个依赖项.找到的程序集清单定义与程序集引用不匹配.(异常来自HRESULT:0x80131040) 解决方法: 1. ...
- Golang实现JAVA虚拟机-指令集和解释器
原文链接:https://gaoyubo.cn/blogs/f57f32cf.html 前置 Golang实现JAVA虚拟机-解析class文件 Golang实现JAVA虚拟机-运行时数据区 一.字节 ...
- 分布式机器学习的故事:Docker改变世界
分布式机器学习的故事:Docker改变世界 Docker最近很火.Docker实现了"集装箱"--一种介于"软件包"和"虚拟机"之间的概念- ...