loj515 「LibreOJ β Round #2」贪心只能过样例[bitset+bool背包]
由于bitset极其不熟练且在实际题目中想不起来运用它来优化,于是练了几道题。
这题是一个分组的bool背包,每组必须选一个,暴力的话是$O(n^5)$。
如果dp数组不要一维滚动的话,有两种枚举方法,一种是枚举体积放外层然后同一组物品放内层,另一种是反过来。
for i ...n
for j ...V
for k ...a[i]
f[i][j]|=f[i-][j-a[k]]
or
for i ...n
for k ...a[i]
for j ...V
f[i][j]|=f[i-][j-a[k]]
然后注意第二种转移有一个可优化的地方。每次$f_{i-1,j}$都是固定向后移$a[k]$位的。这里可以把状态压成一个bitset,可以表出是1,那么整体右移$a[k]$位,取一下或,就是现在可以表出的。是不是很有道理。。于是这个$O(V)\to O(\frac{V}{64})$。
然后这题就可以了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<bitset>
#define mst(x) memset(x,0,sizeof x)
#define dbg(x) cerr << #x << " = " << x <<endl
#define dbg2(x,y) cerr<< #x <<" = "<< x <<" "<< #y <<" = "<< y <<endl
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
template<typename T>inline T _min(T A,T B){return A<B?A:B;}
template<typename T>inline T _max(T A,T B){return A>B?A:B;}
template<typename T>inline char MIN(T&A,T B){return A>B?(A=B,):;}
template<typename T>inline char MAX(T&A,T B){return A<B?(A=B,):;}
template<typename T>inline void _swap(T&A,T&B){A^=B^=A^=B;}
template<typename T>inline T read(T&x){
x=;int f=;char c;while(!isdigit(c=getchar()))if(c=='-')f=;
while(isdigit(c))x=x*+(c&),c=getchar();return f?x=-x:x;
}
const int N=1e6+;
bitset<N> f[];
int n,l,r,now; int main(){//freopen("test.in","r",stdin);//freopen("test.ans","w",stdout);
f[][]=;
read(n);while(n--){
read(l),read(r);f[now^=].reset();
for(register int i=l;i<=r;++i)f[now]|=f[now^]<<(i*i);
}
printf("%d\n",f[now].count());
return ;
}
总结:bitset优化用途之一:判断每位是否可行,操作的时候可以直接整体修改。
loj515 「LibreOJ β Round #2」贪心只能过样例[bitset+bool背包]的更多相关文章
- Loj515 「LibreOJ β Round #2」贪心只能过样例 - Bitset,Dp
		
bitset的基本应用了 类似可行性背包的dp考虑 复杂度O(nmL/64) #include <bits/stdc++.h> using namespace std; bitset &l ...
 - loj515 「LibreOJ β Round #2」贪心只能过样例
		
传送门:https://loj.ac/problem/515 [题解] 容易发现S最大到1000000. 于是我们有一个$O(n^2*S)$的dp做法. 容易发现可以被bitset优化. 于是复杂度就 ...
 - LOJ#515. 「LibreOJ β Round #2」贪心只能过样例(bitset)
		
内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: nzhtl1477 提交提交记录统计讨论测试数据 题目描述 一共有 nnn个数,第 iii ...
 - [LOJ#515]「LibreOJ β Round #2」贪心只能过样例
		
[LOJ#515]「LibreOJ β Round #2」贪心只能过样例 试题描述 一共有 \(n\) 个数,第 \(i\) 个数 \(x_i\) 可以取 \([a_i , b_i]\) 中任意值. ...
 - LibreOJ #515. 「LibreOJ β Round #2」贪心只能过样例
		
题目描述 一共有 nnn个数,第 iii 个数 xix_ixi 可以取 [ai,bi][a_i , b_i][ai,bi] 中任意值.设 S=∑xi2S = \sum{{x_i}^2 ...
 - LibreOJ β Round #2」贪心只能过样例
		
题目友链:https://loj.ac/problem/515 话说这题蛮简单,bitset暴力直接过. 话不多说,上代码! #include <bits/stdc++.h> using ...
 - 「LibreOJ#515」贪心只能过样例 (暴力+bitset)
		
可以发现,答案最大值只有106,于是想到用暴力维护 可以用bitset合并方案可以优化复杂度, Code #include <cstdio> #include <bitset> ...
 - LOJ528 「LibreOJ β Round #4」求和
		
LOJ528 「LibreOJ β Round #4」求和 先按照最常规的思路推一波: \[\begin{aligned} &\sum_{i=1}^n\sum_{j=1}^m\mu^2(\gc ...
 - loj #547. 「LibreOJ β Round #7」匹配字符串
		
#547. 「LibreOJ β Round #7」匹配字符串 题目描述 对于一个 01 串(即由字符 0 和 1 组成的字符串)sss,我们称 sss 合法,当且仅当串 sss 的任意一个长度为 ...
 
随机推荐
- NET中的规范标准注释-- XML注释标签讲解
			
一.摘要 .Net允许开发人员在源代码中插入XML注释,这在多人协作开发的时候显得特别有用. C#解析器可以把代码文件中的这些XML标记提取出来,并作进一步的处理为外部文档. 这篇文章将展示如何使用这 ...
 - ubuntu合上笔记本盖子不断网
			
原理: 修改systemd-logind服务参数. 做法: 编辑下列文件:sudo gedit /etc/systemd/logind.conf 找到HandleLidSwitch项,并将此项 ...
 - nginx源码安装(CentOS版)
			
准备工作: 1) 配好网易yum源 登录此网站(http://mirrors.163.com/.help/centos.html),下载相应版本的yum源至服务器的/etc/yum.repos.d/目 ...
 - sysconf获取系统参数
			
头文件: #include <unistd.h> 原型:long sysconf(int sysnum); 示例: #include <stdio.h> #include &l ...
 - loback的介绍与配置-(通俗易通)
			
一.logback的配置介绍 Logback的配置分为三个内容:Logger.appender及layout Logger:作为日志的记录器,主要用于存放日志对象,也可以定义日志类型.级别. appe ...
 - 在win7中解决Visual C++ 6.0打开文件时出现停止工作问题
			
在使用Visual C++ 6.0打开文件时可能会出现下面的情况 这可能是Vc6.0和win7兼容性问题. 方法: 下载filetool即可 链接:https://pan.baidu.com/s/1X ...
 - python如何切割字符串
			
python字符串的分割方法如下 str.split():字符串分割函数 通过指定分隔符对字符串进行切片,并返回分割后的字符串列表. 语法: str.split(s, num)[n] 参数说明: s: ...
 - memcached基本操作指令
			
item执行命令: 第一行:Key Flags ExpirationTime BytesKey:Key 用于查找缓存值Flags:一个32位的标志值,客户机使用它存储关于键值对的额外信息Expirat ...
 - POJ 2485 Prim 找最长的边
			
A国没有高速公路,因此A国的交通很困难.政府意识到了这个问题并且计划建造一些高速公路,以至于可以在不离开高速公路的情况下在任意两座城镇之间行驶. A国的城镇编号为1到N, 每条高速公路连接这两个城镇, ...
 - Azure下安装Redis
			
注意:这里需要注意Redis的区域,需要跟服务器在同一区域,否则Redis访问会很慢 Azure 中国区目前不支持在Portal管理界面创建 Redis,只能通过PowerShell创建,请参考以下步 ...