首页 > 其他分享 >Bitset使用总结

Bitset使用总结

时间:2023-08-02 16:46:16浏览次数:42  
标签:总结 初始化 int 解锁 bitsetdp bitset 使用 dp Bitset

初始化

下面是初始化例子

void solve()
{
    bitset<7>dp;//初始化大小为7的bitset
    bitset<7>dp(5);//初始化为5的大小为7的bitset,即0000101
    bitset<7>dp("0011010");//用字符串直接初始化
}

修改

void solve()
{
    bitset<4>dp(5);//0101
    dp[0]=0;//0100
}

相关函数

  1. count():用于计算bitset中1的个数。
  2. any():如果bitset中有一个位是1,那么返回true,否则返回false。
  3. none ():如果bitset中每个位都是0,那么返回true,否则返回false。
  4. set ():用于将bitset中的所有位置设置成1。
  5. reset ():用于将bitset中的所有位置设置成0。
  6. flip ():用于将bitset中的所有位置反转。

bitset动态规划例题

CF1855D

题意:给出n张牌,最开始只有第一张牌是解锁状态,其它牌都被锁住了,每张牌上有一个点数a[i],每次可以进行一种操作:

1.解锁顶上的未解锁的a[i]张牌

2.获得a[i]的胜利点数

问最后能得到的最大点数是多少

Solution

定义\(dp_{i}\)表示能否通过若干次解锁操作刚好解锁到i,那么可以遍历a,初始化dp[1]=1,每次令dp|=dp<<a[i],从而转移答案,而对于当前可以刚好解锁的情况,我们需要在更新答案后将其变为0,因为在更新完答案后它就不能转移到其他的位置了,此外,考虑到可能会超过n的范围,我们可以将bitset扩大到2n,以检测最后一次解锁操作的更新位置大于n的情况

void solve()
{
	int n;cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=1;i<=n;i++)
	{
		s[i]=s[i-1]+a[i];
	}
	bitset<200005>dp;
	
	dp[1]=1;
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		dp|=dp<<a[i];
		if(dp[i])
		{
			ans=max(ans,s[i]-i+1);
			dp[i]=0;
		}
	}
//	cout<<dp<<"\n";
	for(int i=n+1;i<=2*n;i++)
	{
		if(dp[i])
		{
			ans=max(ans,s[n]-i+1);
			dp[i]=0;
		}
	}
	cout<<ans<<"\n";
}

标签:总结,初始化,int,解锁,bitsetdp,bitset,使用,dp,Bitset
From: https://www.cnblogs.com/HikariFears/p/17601093.html

相关文章

  • protobuf在c++中的使用
    一、安装sudoaptinstalllibprotobuf-devprotobuf-compiler二、编辑proto文件,生成代码文件proto语法分为“proto2”和”proto3“两个版本,指定方法是在proto文件中第一行写入:syntax="proto3";,这样指定使用proto3版本的语法,如果不指定,默认是使用proto2的语法。两个语法的......
  • SSH 使用 root 权限登录 Nas
    一、启用SSH服务转到Synology设备的终端设置页面:SynologyNAS:DSM控制面板>终端机和SNMP>终端机勾选启用SSH服务。指定SSH连接的端口号并保存设置。为了确保系统安全性,建议将默认端口22替换为其他端口号。 二、sshDSM/SRM管理员帐户@DSM/SRMIP地址-pSSH......
  • Linux su命令:su命令语法、su root与su - root区别、su与sudo区别、su -c 参数的使用理
    https://www.cnblogs.com/goloving/p/15150206.html Linuxsu(英文全拼:switchuser)命令用于变更为其他使用者的身份,除root外,需要键入该使用者的密码。使用权限:所有使用者。一、语法su[-fmp][-ccommand][-sshell][--help][--version][-][USER[ARG]]1、参数说......
  • 使用cron来定时执行脚本的步骤
    创建一个脚本,比如:/opt/port_stats.sh,脚本内容:#!/bin/bash#设置要监控的端口列表ports=({80,8080,456})#执行一次循环forportin"${ports[@]}";do num=$(netstat-nat|grep":"$port|wc-l) echo"[$(date'+%Y-%m-%d%H:%M:%S')]$port$num"&......
  • php-elasticsearch客户端基本使用
    php-elasticsearch客户端基本使用标签(空格分隔):php,elasticsearch官方文档:https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/getting-started-php.html#_searching_documents官方中文文档(已过时):https://www.elastic.co/guide/cn/elasticsearch/php/cur......
  • PHP反序列化例题以及Bypass总结
    unseping题目源码<?phphighlight_file(__FILE__);classease{private$method;private$args;function__construct($method,$args){$this->method=$method;$this->args=$args;}function__destruct(){......
  • Vue学习笔记:VCA下使用provide与 inject
    在VCA模式下使用provide和inject与之前文档中VOA模式类似,不同的是需要在使用前进行importimport{provide,inject}from'vue'在此篇文档中,使用一个示例来演示provide与inject的使用功能如下:组件NavbarDetailList部署在根组件App上。在初始页面,显示Navbar与List。List组件......
  • 「赛后总结」暑假 CSP 模拟赛系列
    「赛后总结」暑假CSP模拟赛系列点击查看目录目录「赛后总结」暑假CSP模拟赛系列20230728(fengwuround)T3CountMultisetT4Juliathesnail20230730(ZZ作者round)T3数组T4树20230731(Max_QAQround)T3UT4E20230801(letitdownround)T2神(eldenring)T4动(genshin)20230802(Max_......
  • 使用HTTP代理时的小技巧
     作为HTTP代理产品供应商,我们深知使用HTTP代理的重要性和优势。我们将为您详细介绍使用HTTP代理的小技巧,让您能够在实际应用中更加高效地利用HTTP代理,享受到更畅通的互联网体验。 一、选择稳定可靠的HTTP代理服务供应商 选择稳定可靠的HTTP代理服务供应商是使用HTTP代理的......
  • ROS参数使用与编程方法
    参数参数概念在ROSMaster中,存在一个参数服务器(ParameterServer),它是一个全局字典,即一个全局变量的存储空间,用来保存各个节点的配置参数。各个节点都可以对参数进行全局访问。创建功能包cd~/catkin_ws/srccatkin_create_pkglearning_parameterroscpprospystd_srvs参数......