P2396 yyy loves Maths VII 题目背景 yyy对某些数字有着情有独钟的喜爱,他叫他们为幸运数字;然而他作死太多,所以把自己讨厌的数字成为"厄运数字" 题目描述 一群同学在和yyy玩一个游戏 每次,他们会给yyy n张卡片,卡片上有数字,所有的数字都是"幸运数字",我们认为第i张卡片上数字是ai 每次yyy可以选择向前走ai步并且丢掉第i张卡片 当他手上没有卡片的时候他就赢了 但是呢,大家对"厄运数字"的位置布置下了陷阱,如果…
题目大意:给一个长度为$n(1\leqslant n\leqslant24)$的序列$S$和$k(0\leqslant k\leqslant2)$个数. 求有多少种$S$的排列方式使得其任何一个前缀和都不是$k$个数里的任意一个. 题解:状压$DP$,枚举当前选的数的状态和下一个数,卡常,枚举下一个数的时候不可以直接枚举,要枚举$lowbit$看是从哪个数转移过来的,洛谷那道题特别卡常,需要开$O(2)$ 卡点:无 C++ Code: #include <cstdio> #define max…
题目:https://www.luogu.org/problemnew/show/P2396 题意:有n个数,每次选择一个表示走$a[i]$步,每个数只能选一次. 最多有两个厄运数字,如果走到了厄运数字就不能继续走下去了. 选完所有数有多少种方案. 思路:n很小,状压. 用state表示已经选了哪几个数.如果state是厄运数字就continue 不是的话state就需要加上所有是1的,这道题卡常,所以可以用上lowbit.再开O2优化. #include<cstdio> #include&l…
这道题是一个状压动归题.子集生成,每一位表示是否选择了第$i$个数. 转移:$f[S] = \sum f[S-\{x\}]$且$x\in S$,当该子集所有元素的和为$b_1$或$b_2$时不转移. 初始化:$f[\{\}]=1$,其他为$0$. 目标:$f[全集]$. 注意常数即可. #include <bits/stdc++.h> using namespace std; #define re register #define rep(i, a, b) for (re int i = a;…
P2397 yyy loves Maths VI (mode) 题目背景 自动上次redbag用加法好好的刁难过了yyy同学以后,yyy十分愤怒.他还击给了redbag一题,但是这题他惊讶的发现自己居然也不会,所以只好找你 题目描述 udp2:第一题因为语言性质问题,比赛结束后将所有c/c++的程序的内存调为2.2mb后重测. 他让redbag找众数 他还特意表示,这个众数出现次数超过了一半 一共n个数,而且保证有 n<=2000000 而且每个数<2^31-1 输入输出格式 输入格式: 第一…
P2393 yyy loves Maths II 题目背景 上次蒟蒻redbag可把yyy气坏了,yyy说他只是小学生,蒟蒻redbag这次不坑他了. 题目描述 redbag给了yyy很多个数,要yyy计算这些数的和.必须要快,redbag只给了yyy1秒的时间!!! 输入输出格式 输入格式: 一行,很多个数 输出格式: 一行,一个实数(四舍五入精确到5位小数),表示这些数的和. 输入输出样例 输入样例#1: 复制 1 输出样例#1: 复制 1.00000 说明 [数据规模] 对于100%的数据…
P2393 yyy loves Maths II 题目背景 上次蒟蒻redbag可把yyy气坏了,yyy说他只是小学生,蒟蒻redbag这次不坑他了. 题目描述 redbag给了yyy很多个数,要yyy计算这些数的和.必须要快,redbag只给了yyy1秒的时间!!! 输入输出格式 输入格式: 一行,很多个数 输出格式: 一行,一个实数(四舍五入精确到5位小数),表示这些数的和. 输入输出样例 输入样例#1: 复制 1 输出样例#1: 复制 1.00000 说明 [数据规模] 对于100%的数据…
Link: P2396 传送门 Solution: 一眼能看出$O(n*2^n)$的状压$dp$ 但此题是个卡常题,$n=23/24$的时候就别想过了 这题算是提供了一种对状压$dp$的优化思路吧 原来我们要用$n$的时间来查找当前有哪些位为1,然后从这些位来转移 但实际上可以通过树状数组中$lowbit$函数的方式用$popcount(i)$的复杂度来得到所有的1 此时总的复杂度降到了$O(\sum_{i=1}^{2^n-1} popcount(i))$,实际上就是$O(n*2^{n-1})$…
洛谷P2704:https://www.luogu.org/problemnew/show/P2704 思路 这道题一开始以为是什么基于状压的高端算法 没想到只是一道加了一行状态判断的状压DP而已 与普通状压并无多大区别 详细见代码 代码 #include<iostream> using namespace std; #define maxn 1010 ][maxn][maxn],num[maxn],st[maxn],map[]; int n,m,ans,state; int get(int…
洛谷P1896:https://www.luogu.org/problemnew/show/P1896 前言 这是一道状压DP的经典题 原来已经做过了 但是快要NOIP 复习一波 关于一些位运算的知识点参考: https://blog.csdn.net/fox64194167/article/details/20692645 思路 看数据识算法系列 我们用f[i][j][k]来表示第i行为状态j 并且前i行已经放了k个国王 对于状态我们可以先预处理出来 因为每个格子有放和不放两种选择 那么我们可…