博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
loj 515(bitset优化dp)
阅读量:4684 次
发布时间:2019-06-09

本文共 962 字,大约阅读时间需要 3 分钟。

 

题意:

一共有 $n$个数,第 $i$ 个数 $x_i$ 可以取 $[a_i , b_i]$ 中任意值。

设 $S = \sum{
{x_i}^2}$,求 $S$ 种类数。

分析:

显然可以发现,极限情况下$S$最大为$1000000$,同时,我们可以发现,当前取到了第$i$个数的状态,必然可以由第$i-1$个状态转移过来。因此我们可以写出一个$\mathcal{O}(n^2S)$的$dp$。

而上述复杂度显然不科学,而考虑到$S$虽然有$1000000$种,但只含有取和不取两种状态,因此此时我们可以用bitset进行优化转移,整体时间复杂度为:$\mathcal{O}(\frac{n^2S}{64})$

代码:

#include 
#define maxn 1000005using namespace std;bitset
bit1, bit2;int a[105], b[105];int main() {
int n; scanf("%d", &n); for (int i = 1; i <= n; i++) {
scanf("%d%d", &a[i], &b[i]); } for (int i = 1; i <= n; i++) {
int l = a[i], r = b[i]; for (int j = l; j <= r; j++) {
if (i == 1) bit1.set(j * j); else bit2 |= bit1 << (j * j); } if (i == 1) bit2 = bit1; bit1 = bit2; bit2.reset(); } printf("%d\n", bit1.count());}

转载于:https://www.cnblogs.com/Chen-Jr/p/11007135.html

你可能感兴趣的文章
Java常用的非受检异常
查看>>
HDOJ-2054
查看>>
centos7安装eclipse
查看>>
P3698 [CQOI2017]小Q的棋盘
查看>>
动态规划入门 洛谷P2409 Y的积木
查看>>
【第一季】CH04_FPGA设计Verilog基础(一)Enter a post title
查看>>
Mysql全文索引
查看>>
jmeter(四十四)常用性能指标分析
查看>>
F - 八苦を滅した尼公 POJ - 2763 线段树LCA
查看>>
通过jQuery源码学习javascript(一)
查看>>
源码阅读经验谈-slim,darknet,labelimg,caffe(1)
查看>>
SecureCRT配色方案
查看>>
Unity3D 关于yield在collider中的使用
查看>>
spring-mvc xml文件的最基本配置
查看>>
word 新建一行文字不能左对齐
查看>>
jquery选择器
查看>>
IT公司的等级观念
查看>>
百度编辑器ueditor1.4.3配置记录
查看>>
ubuntu12.04开启Framebuffer
查看>>
【问题和解决】python中nltk与nltk_contrib的关系
查看>>