CF#448C 数论+壮压DP

【状压DP】状态压缩动态规划入门超详解 状压DP一、概述1.状态压缩2.使用条件3.状压DP二、位运算三、例题引入入门例题【例1】填满棋盘入门例题【例二】玉米地 感觉好多讲状压DP的博客都有点乱,我就结合各路大佬的博客,加上我自己的理解,总结出一篇博客来,供初学者参考 一、概述 1.状态压缩 状态压缩就是使用某种方法,简明扼要地以最小代价来表示某种状态,通常是用一串01数字(二进制数)来表示各个点的状态。这就要求使用状态压缩的对象的点的... 阅读详情
//题意:给若干个数(1e5),求子集个数,使得子集内的数乘积是平方数 ai<=70 
//思路,由于只有70,分解质因数,对每一个数进行质因数分类 
//用状态压缩,十进制数tem表示i(1<=i<=70)的分解质因数的分布和奇偶 比如i=30=2*3*5,此时状态tem=111  i=60=2*2*3*5,此时状态tem=110 
//那么dp[i][j]表示前i个数,目前已选的数乘积的状态是j的可选个数,cnt[i]表示i出现的次数
//每次能从cnt[i]中选奇数个i,或偶数个i,奇数个就是j的状态要改变,选偶数个i就不用变
//选偶数个::C(cnt[i],0)+C(cnt[i],2)+C(cnt[i],4)....C(cnt[i],n)=2^(cnt[i]-1) ,奇数个也是这个
//ans=dp[70][0]-1; (0代表刚好全部质数都选了偶数个) 
#include<iostream>
#include<stdio.h>
using namespace std;
#define ll long long
const int mod=1e9+7;
int prime[19]= {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67};
int cnt[71];
int bm[1<<19];
int pow2[100005];
int dp[71][(1<<19)+5];
int bitmask(int x)
{
	int res=0;
	for(int i=0; i<19; i++)
	{
		while(x%prime[i]==0)
		{
			res^=(1<<i);
			x/=prime[i];
		}
	}
	return res;
}
void init()
{
	pow2[0]=1;
	for(int i=1; i<=100005; i++)
		pow2[i]=pow2[i-1]*2%mod;
}
//ll mod_pow(ll x,ll n,ll mod)//快速幂 余数
//{
//	ll res=1;
//	while(n>0)
//	{
//		if(n&1)//n的二进制最右位是1,即奇数
//			res=res*x%mod;
//		//res=mul(res,x,mod);
//		x=x*x%mod;
//		//x=mul(x,x,mod);
//		n=n>>1;		 //相当于n/=2;
//	}
//	return res;
//}
int main()
{
	init();
	int n;	int t;
	scanf("%d",&n);
	for(int i=0; i<n; i++)
	{
		scanf("%d",&t);
		cnt[t]++;
	}
	dp[0][0]=1;
	for(int i=1; i<=70; i++)
	{
		if(cnt[i]==0)
		{
			for(int j=0;j<(1<<19);j++)
			dp[i][j]=dp[i-1][j];//继承
		}
		else
		{
			int tem=bitmask(i);
			for(int j=0; j<(1<<19); j++)
			{
				//dp[i][j^tem]+=1ll*mod_pow(2,cnt[i]-1,mod)*dp[i-1][j]%mod;TLE
				dp[i][j^tem]+=1ll*pow2[cnt[i]-1]*dp[i-1][j]%mod;//选奇数个
				dp[i][j^tem]%=mod;
				//dp[i][j]+=1ll*mod_pow(2,cnt[i]-1,mod)*dp[i-1][j]%mod;TLE
				dp[i][j]+=1ll*pow2[cnt[i]-1]*dp[i-1][j]%mod;//选偶数个
				dp[i][j]%=mod;
			}
		}
	}
	printf("%d\n",(dp[70][0]-1+mod)%mod);//减去全不选的情况
}

树莓派4B安装 ubuntu20.04 & VNC远程桌面 & 安装ROS noetic 树莓派4B安装ubuntu20.04 & VNC远程桌面1、安装ubuntu方式1:下载Imager文件。方式2:下载镜像文件。2、查询树莓派 IP 地址3、使用ssh远程登录树莓派4、更新源地址5、更新6、安装桌面环境7、允许root登陆8、登陆远程桌面9、设置中文 1、安装ubuntu 方式1:下载Imager文件。... 阅读详情

相关推荐

基于CANoe的Basic Diagnostics ECU (UDS)

基于CANoe的Basic Diagnostics ECU (UDS)

farmer00的博客 9153

状态压缩DP 图文详解(一)

超详细的讲解,有图有真相的状压DP真的不来看看吗?

m0_64226820的博客 2万+

Mac上Office合法安装与激活全指南:2021/2024/M365区别解析

Office是微软办公套件的核心产品,其在macOS平台的部署逻辑与Windows截然不同——不依赖传统密钥激活,而是基于Microsoft账户与设备标识的云端绑定机制。理解这一原理,是解决‘无法验证开发者’‘打不开’‘功能受限’等常见问题的前提。Office 2021代表永久许可模型,Office 2024 LTSC面向企业离线场景,Microsoft 365则是持续订阅服务,三者在授权验证方式、更新策略与系统兼容性上存在本质差异。实际应用中,需结合macOS版本、芯片架构(Intel/Apple Sil

weixin_33491377的博客 1253

hdu 5823(壮压dp)

一开始的思路是状态压缩后,枚举每个状态,然后第二层循环枚举每个状态的单个点,然后通过判断  进行dp[i]=dp[j]+1或者dp[i]=dp[j],j是i的单个点,因为新加入一个点之后不会判断  到底应该不应该加一  所以GG. 看了题解,知道了一个概念。独立子集:集合内的点。两两之间都没用边。这样的集合内只需要一种颜色就可以染色。所以由刚刚的思路改成枚举每个状态的独立子集,然后dp[i]=d

constbh的博客 532

EEG/ERP新手必看:5本神经科学入门书籍推荐(附高清PDF下载)

本文为EEG/ERP研究新手推荐5本神经科学入门书籍,涵盖认知神经科学、数据分析、ERP技术等核心内容。特别推荐《认知神经科学—关于心智的生物学》和《事件相关电位基础》,这些书籍不仅提供理论框架,还包含实用案例和MATLAB代码,帮助研究者快速掌握脑电研究技术。附高清PDF下载,适合实验室小组学习。

weixin_29210727的博客 445

STM32CUBEMX+STM32H750VB+LWIP+LAN8720A+FREERTOS TCP服务器、UDP数据接收发送、网线热插拔、IAR-8.32开发

STM32CUBEMX+STM32H750VB+LWIP+LAN8720A+FREERTOS TCP服务器、UDP数据接收发送、网线热插拔、IAR-8.32开发STM32H750VB使用STM32CUBEMX生成工程IAR+J-LINK调试准备工作CUBEMX生成的代码问题所在如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章U

qq_37433166的博客 5345

状态压缩动态规划讲解

【前言】 状态压缩动态规划,就是我们俗称的状压DP,是利用计算机二进制的性质来描述状态的一种DP方式,状压其实是一种很暴力的算法,因为他需要遍历每个状态,所以将会出现2^n的情况数量,不过这并不代表这种方法不适用:一些题目可以依照题意,排除不合法的方案,使一行的总方案数大大减少从而减少枚举 【预备知识】 在学习状压DP前,必须先要学习一下位运算 ①左移: 左移一位,就相当于某数乘以2,则左移n位,相当于某数乘以2ⁿ ②右移: 右移一位,就相当于某数除以2,则左移n位,相当于某数除以2ⁿ ③与运算: 按位进行

LTR28的博客 372

FEniCS学习笔记01:centos7下通过conda安装FEniCSx0.7

2023年版本的Fenicsx0.7,官网推荐使用conda命令安装集成好的Python包,因此我们的安装思路是先安装Anaconda,再按照官网步骤安装Fenics。

huahua_xiao的博客 5056

状态压缩DP学习总结+经典例题精解

文章目录状压DP学习总结+经典例题精解1、前言2、状态压缩3、使用场景4、常用模板5、经典例题[5.1、 [USACO06NOV]Corn Fields G](https://www.luogu.com.cn/problem/P1879)5.2、吃奶酪[5.3、 [USACO13NOV]No Change G](https://www.luogu.com.cn/problem/P3092)5.4、[SCOI2005]互不侵犯 状压DP学习总结+经典例题精解 1、前言 学了这么久,说真的,动态规划是一个特别

pursuit的博客 1万+

端到端自动驾驶的精准测试场景开发

1. 背景介绍 自动驾驶技术的发展正在改变交通运输的未来,然而,要实现安全可靠的自动驾驶,需要进行大量的测试和验证。端到端自动驾驶系统的测试场景开发是实现这一目标的关键。本文将详细介绍端到端自动驾驶的精准测试场景开发,包括核心概念、算法原理、数学模型、项目实践,以及未来发展趋势。 2. 核心概念与联系

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 1319

继电器控制LED灯具导致触点烧蚀粘连的解决办法

继电器控制LED灯具导致触点烧蚀粘连的解决办法

2700

状压dp模板

状压dp与普通dp不同的方面即为它把之前的各种状态用一个数字表示,通过这个数字二进制条件下各位是0还是1来表示这个状态下的各种情况(是否有放棋子之类的),然后通过枚举数字即可枚举之前的各种情况进行dp 位运算的技巧 1.判断一个数字x二进制下第i位是不是等于1。(最低第1位) 方法:if(((1<<(i−1))&x)>0) 将1左移i-1位,相当于制造了一个只有第i位 上是1,其他位上都是0的二进制数。然后与x做与运算,如果结果>0, 说明x第i位上是1,反之则是0。

qq_55788328的博客 536

《QEMU/KVM源码分析与应用》读书笔记1 —— 第1章 QEMU与KVM概述

《QEMU/KVM源码分析与应用》学习笔记1 —— 第一章 QEMU与KVM概述

phmatthaus的专栏 1984

状压DP常见位运算及解释

状压DP常见位运算及解释 引言 :状压DP的代码中,常出现位运算,导致很多萌新比如我在状压DP的学习上男上加男♂,这篇博客总结了状压DP中常见的位运算,希望能帮到大家。

Melancholy的博客 227

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

CF构造思维题练习(1200-1400)

大于0条件不考虑n,所以可以把n看作垃圾桶,前面所有的数都倒入第n个元素,假设每个数到第n个数之间都是大于0的,那么我们可以从左边将i值减为0,而n加上i,操作数+i。但是不可能每个数到第n个数之间都是大于0的,所以对之间的0特判一次操作,也就是肯定要分出操作来将0处变为1.因为不管证明操作n之前的元素总和都没变,所以答案就是将所有数减完的操作数sum,加上需要填的0的个数。②n/2为奇数,也很简单,n/2站一位,剩下两个位置,一个留给1不改变最小公倍数,剩下的(n/2)-1刚好站一位。...

m0_60777643的博客 1622

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

状压DP 学习笔记

首先来说一下状态压缩 状态压缩就是使用某种方法,简明扼要地以最小代价来表示某种状态,通常是用一串01数字(二进制数)来表示各个点的状态。这就要求使用状态压缩的对象的点的状态必须只有两种,0 或 1;当然如果有三种状态用三进制来表示也未尝不可。 使用条件 1. 解法需要保存一定的状态数据(表示一种状态的一个数据值),每个状态数据通常情况下是可以通过2进制来表示的。这就要求状态数据的每个单元只有两种状态,比如说棋盘上的格子,放棋子或者不放,或者是硬币的正反两面。这样用0或者1来表示状态数据的每个单元,

glorious_dream的博客 1130

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

状态压缩dp(状压dp)

注:在涉及到位运算时,一定要注意位运算的优先级。该加的括号一定要加 状压dp是一类比较难理解的dp; 在讲状压dp之前,我们应该清楚所有的dp是解决多阶段决策最优化问题的一种思想方法; 请注意多阶段这三个字: 经过前面三种背包的学习,可以发现如何定义状态是解决动态规划最重要的一步; 状态的定义也就决定了相当于阶段的划分; 在背包问题中,我们通过物品的件数i和背包的容量j来定义状态或者说...

唐宋元明清的博客 3万+

状压DP学习总结 (详解,适合没状压dp基础的人学习,还在更新中,,,,)

本次博客,主要是给学弟学妹们讲解一下状压dp,不适合有基础的同学观看,可能会浪费时间,因为偏基础 先来最简单的一个吧 http://acm.hdu.edu.cn/showproblem.php?pid=1565hdu 1565 方格取数(1) Time Limit: 10000/5000 MS (Java/Others)Memory Limit: 32768/32768 K (...

Amo丶 2万+

cf思维题

一 Balance the Bits 传送门 A sequence of brackets is called balanced if one can turn it into a valid math expression by adding characters ‘+’ and ‘1’. For example, sequences ‘(())()’, ‘()’, and ‘(()(()))’ are balanced, while ‘)(’, ‘(()’, and ‘(()))(’ a

m0_51690407的博客 777

CF思维训练

4

R的博客 771

CF补题:思维题

【代码】CF补题:思维题。

gyeolhada的博客 328

壮压DP 经典例题:Corn Fields 炮兵阵地

状态压缩动态规划,就是我们俗称的状压DP,是利用计算机二进制的性质来描述状态的一种DP方式 状压,顾名思义就是要将一些状压想办法压缩起来(可以压,也可以删)。其中这些状态都满足相似性和数量很多。这样才好压而且压得有意义。常见于一般的方格题,网络题等等 ## 一般基础的状压就是将一行的状态压成一个数,这个数的二进制形式反映了这一行的情况 所以位运算可以帮助我们解决很多问题 1.& 符号,x&...

henulmh的博客 652

cf思维 专题1

纪录思维题 A. Array and Peaks

cosx_的博客 551

CF思维题

HIST校内选拔训练赛(纯思维题)A.Almost RectangleB.A-B PalindromeC.Corrupted ArrayD. Double-ended Strings A.Almost Rectangle 原题链接 思路:题目大概意思是在二维矩阵里给出你两个点,有可能在同一行同一列,然后让你枚举出另外两个点,使他们成为一个矩形。这里除了需要特判的同一行同一列,要考虑边界情况外,其余都是 ch[x1][y2],ch[x2][y1] 。 import java.util.Scanner; p

weixin_45956597的博客 549

HDU 1074 Doing Homework(壮压 dp)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1074 题意:有n个作业要做,每个作业都有deadline 和 做该项作业需要花费的时间,合理安排做作业的顺序,使得超额天数最小,输出该天数,并输出做作业的顺序。 思路:每样作业有完成和未完成两种状态,很显然这是一道状态压缩dp,这也是我做的第一道壮压(回想起来都是辛酸史啊……)壮压一般考验的都是我

Yedl的专栏 822

【CF】Day120——杂题 (字符串 + 贪心 | 操作模拟 + 思维 + 判断字符串相等 | 图论 + 思维 | 构造 + 贪心 | 双指针 + 思维 + 逆元 + 组合数学 | 思维 + 贪心)

题目的条件其实很严格,任意两者的差值都不能大于 m,而又要有 m 个数,所以最大值最小值相差 m,而 m 个数那么中间就有 m - 2 个数,不难发现这就是一个长度为 m ,公差为 1 的等差数列。具体的,如果有一条边其父亲的出现时间小于自身,那么显然可以直接接上,此时操作次数继承父亲即可,否则如果大于,说明父亲在自己之后,那么只有下一轮才能轮到自己,此时操作次数为父亲次数 + 1。由于我们选的是一段连续的区间,那么其中任意的数的位置其实是不同的,所以奉献就是每个数的数量的积,因此考虑前缀积。

qq_61422664的博客 1050
上一篇: 17南宁打铁心得
下一篇: 三角形中的正方形,三个问题
animalcoder
博客等级 码龄9年 43粉丝 150原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值