[DP][容斥原理] BZOJ 4762: 最小集合
来源:互联网 发布:json xml yml yaml 编辑:程序博客网 时间:2024/05/14 20:08
Description
定义一个非空集合是合法的,当且仅当它满足以下两个条件。
- 1、集合内所有元素
and 和为0 。 - 2、它的非空子集中仅有它本身满足
1 。
给出一个集合
Solution
设
那么就有答案为:
所以就有
这样就可以DP了。
需要记录上式前后两个值。
设
每次转移考虑是否在
- 若不选入
S 与T :dpi−1,j,k→dpi,j,k - 若选入
S 但不选入T :dpi−1,j,k→dpi,j∧x,k∧x - 若选入
S 与T :−dpi−1,j,k→dpi,j∧x,k∧x∨j
可以再所有数之前加一个
因为是在枚举集合中枚举子集,所以时间复杂度是
#include <bits/stdc++.h>using namespace std;const int N = 1030;const int MOD = 1000000007;inline char get(void) { static char buf[100000], *S = buf, *T = buf; if (S == T) { T = (S = buf) + fread(buf, 1, 100000, stdin); if (S == T) return EOF; } return *S++;}inline void read(int &x) { static char c; x = 0; for (c = get(); c < '0' || c > '9'; c = get()); for (; c >= '0' && c <= '9'; c = get()) x = x * 10 + c - '0';}int dp[N][N], dp1[N][N];int n;int a[N];inline void Add(int &x, int a) { x += a; while (x >= MOD) x -= MOD;}int main(void) { read(n); for (int i = 1; i <= n; i++) read(a[i]); dp1[1023][1023] = 1; for (int i = 1; i <= n; i++) { for (int j = 0; j < 1024; j++) { for (int S = j; S; S = (S - 1) & j) dp[S][j] = 0; dp[0][j] = 0; } for (int j = 0; j < 1024; j++) { for (int S = j; S; S = (S - 1) & j) { if (!dp1[S][j]) continue; Add(dp[S][j], dp1[S][j]); Add(dp[S & a[i]][j & a[i]], dp1[S][j]); Add(dp[S & a[i]][j & a[i] | S], MOD - dp1[S][j]); } if (!dp1[0][j]) continue; Add(dp[0][j], dp1[0][j]); Add(dp[0][j & a[i]], dp1[0][j]); Add(dp[0][j & a[i]], MOD - dp1[0][j]); } for (int j = 0; j < 1024; j++) { for (int S = j; S; S = (S - 1) & j) dp1[S][j] = dp[S][j]; dp1[0][j] = dp[0][j]; } } printf("%d\n", dp[0][0]);}
阅读全文
2 0
- [DP][容斥原理] BZOJ 4762: 最小集合
- [容斥] BZOJ 4762 最小集合
- BZOJ 2839 集合计数 容斥原理
- [容斥原理] BZOJ 2839 集合计数
- [容斥原理]BZOJ 2839: 集合计数
- bzoj 3812 状压dp 容斥原理
- bzoj 2669 状压dp 容斥原理
- bzoj 1042(dp+容斥原理)
- BZOJ 1042 [DP][容斥原理]
- BZOJ 4710 容斥原理+dp
- bzoj 2839: 集合计数 (容斥原理)
- bzoj 2839: 集合计数 排列组合+容斥原理
- BZOJ 2839: 集合计数 容斥原理 组合数学
- BZOJ 3812 主旋律 状压DP+容斥原理
- BZOJ 1042(简单DP+容斥原理)
- 【bzoj 1042】 [HAOI2008] 硬币购物(dp+容斥原理)
- [容斥原理 DP] BZOJ 4767 两双手
- bzoj 4710: [Jsoi2011]分特产 (容斥原理+DP)
- mysql建表模版
- Android eng版本开机有fastboot界面(lk代码分析)
- python 操作某个超像素
- Angualr基础入门
- LevelDb源码学习——版本管理
- [DP][容斥原理] BZOJ 4762: 最小集合
- java.lang.Exception: No tests found matching [{ExactMatcher:fDisplayName=findAll], {ExactMatcher:fDi
- 序列化对象
- 一、介质访问控制方法CSMA/CD、Token Bus与Token Ring的比较:
- POJ 3259.Wormholes
- 机器学习笔记2.模型评估于选择----教材周志华西瓜书
- 利用highcharts在html页面混编jq引入失败问题
- abstract,以及abstract抽象类与interface接口的区别
- Win10下安装MySQL后,"mysql -uroot -p"无法启动mysql服务的解决方法。