题目大意:给一个长度为$n(1\leqslant n\leqslant24)$的序列$S$和$k(0\leqslant k\leqslant2)$个数。

求有多少种$S$的排列方式使得其任何一个前缀和都不是$k$个数里的任意一个。

题解:状压$DP$,枚举当前选的数的状态和下一个数,卡常,枚举下一个数的时候不可以直接枚举,要枚举$lowbit$看是从哪个数转移过来的,洛谷那道题特别卡常,需要开$O(2)$

卡点:

C++ Code:

#include <cstdio>
#define maxn 30
#define N (1 << 24 | 5)
const int mod = 1e9 + 7;
int n, k;
int s[maxn], _1, _2;
inline long long fac(int n) {
long long res = 1;
for (int i = 2; i <= n; i++) res = res * i % mod;
return res;
} int f[N], S[N];
inline void up(int &a, int b) {if ((a += b) >= mod) a -= mod;}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%d", s + i), S[1 << i - 1] = s[i];
scanf("%d", &k);
if (!k) return !printf("%lld\n", fac(n));
switch (k) {
case 2: scanf("%d", &_2);
case 1: scanf("%d", &_1);
}
int U = 1 << n;
f[0] = 1;
for (register int i = 1; i < U; i++) {
int k = i & -i;
S[i] = S[i ^ k] + S[k];
if (S[i] != _1 && S[i] != _2) for (register int j = i; j; j &= j - 1) up(f[i], f[i ^ (j & -j)]);
}
printf("%d\n", f[U - 1]);
return 0;
}

  

[CF327E]Axis Walking([洛谷P2396]yyy loves Maths VII)的更多相关文章

  1. 洛谷P2396 yyy loves Maths VII

    P2396 yyy loves Maths VII 题目背景 yyy对某些数字有着情有独钟的喜爱,他叫他们为幸运数字;然而他作死太多,所以把自己讨厌的数字成为"厄运数字" 题目描述 ...

  2. [洛谷P2396]yyy loves Maths VII $\&$ [CF327E]Axis Walking

    这道题是一个状压动归题.子集生成,每一位表示是否选择了第$i$个数. 转移:$f[S] = \sum f[S-\{x\}]$且$x\in S$,当该子集所有元素的和为$b_1$或$b_2$时不转移. ...

  3. 洛谷P2396 yyy loves Maths VII【状压dp】

    题目:https://www.luogu.org/problemnew/show/P2396 题意:有n个数,每次选择一个表示走$a[i]$步,每个数只能选一次. 最多有两个厄运数字,如果走到了厄运数 ...

  4. 洛谷P2397 yyy loves Maths VI (mode)

    P2397 yyy loves Maths VI (mode) 题目背景 自动上次redbag用加法好好的刁难过了yyy同学以后,yyy十分愤怒.他还击给了redbag一题,但是这题他惊讶的发现自己居 ...

  5. 洛谷——P2393 yyy loves Maths II

    P2393 yyy loves Maths II 题目背景 上次蒟蒻redbag可把yyy气坏了,yyy说他只是小学生,蒟蒻redbag这次不坑他了. 题目描述 redbag给了yyy很多个数,要yy ...

  6. 洛谷 P2393 yyy loves Maths II

    P2393 yyy loves Maths II 题目背景 上次蒟蒻redbag可把yyy气坏了,yyy说他只是小学生,蒟蒻redbag这次不坑他了. 题目描述 redbag给了yyy很多个数,要yy ...

  7. [洛谷2397]yyy loves Maths VI

    题目背景 自动上次redbag用加法好好的刁难过了yyy同学以后,yyy十分愤怒.他还击给了redbag一题,但是这题他惊讶的发现自己居然也不会,所以只好找你 题目描述 他让redbag找众数他还特意 ...

  8. [P2396] yyy loves Maths VII

    Link: P2396 传送门 Solution: 一眼能看出$O(n*2^n)$的状压$dp$ 但此题是个卡常题,$n=23/24$的时候就别想过了 这题算是提供了一种对状压$dp$的优化思路吧 原 ...

  9. 洛谷 P1580 yyy loves Easter_Egg I

    洛谷 P1580 yyy loves Easter_Egg I 题解: 队列+字符串 #include <cstdio> #include <string> #include ...

随机推荐

  1. laravel自定义返回错误方法

    返回视图传递错误信息 function withInfoErr($msg){ return back()->with('error',$msg); } 返回视图提示消息 function wit ...

  2. 仿制用友U8界面

    unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System ...

  3. scala映射和元组

    scala映射,是一对键值对,相当于java中的Map 对偶:由两个值构成的组,形式 : 值1->值2,值1和值2类型不一定要相同,可以理解为对偶就是一个key/value 映射就是对偶的集合 ...

  4. Spark-源码-Spark-Submit 任务提交

    Spark 版本:1.3 调用shell, spark-submit.sh args[] 首先是进入 org.apache.spark.deploy.SparkSubmit 类中调用他的 main() ...

  5. Scala语法(二)

    (1)类,对象 //定义类(属性.方法),实例化对象 class counter{ *//主构造器 class counter(name:String,mode:Int){ ... } 实例化:val ...

  6. Scrapy之Cookie和代理

    cookie cookie: 获取百度翻译某个词条的结果 一定要对start_requests方法进行重写. 两种解决方案: 1. Request()方法中给method属性赋值成post2. For ...

  7. tail命令使用

    1.tail命令 命令的主要用途是将指定的文件的最后部分输出到终端,如果该文件有更新,tail会自己主动刷新. 2.tail语法 tail [ -f ] [ -c Number | -n Number ...

  8. idea添加源代码目录,编译代码出现时钟样式

    项目结构需要有一个target目录,需要一个src目录,

  9. Python3 列表,元组,字典,字符串知识小结

    一.知识概要 1. 列表,元组,字典,字符串的创建方式 2. 列表,元组,字典,字符串的方法调用 3. 列表,元组,字典,字符串的常规用法 二.列表 # 列 表 # 列表基础 list_1 = ['a ...

  10. go学习笔记-变量和常量

    变量和常量 变量 基本写法 //定义一个名称为"variableName",类型为"type"的变量 var variableName type //定义三个类 ...