铭铭有n个十分漂亮的珠子和若干根颜色不同的绳子。现在铭铭想用绳子把所有的珠子连接成一个整体。
  现在已知所有珠子互不相同,用整数1到n编号。对于第i个珠子和第j个珠子,可以选择不用绳子连接,或者在ci,j根不同颜色的绳子中选择一根将它们连接。如果把珠子看作点,把绳子看作边,将所有珠子连成一个整体即为所有点构成一个连通图。特别地,珠子不能和自己连接。
  铭铭希望知道总共有多少种不同的方案将所有珠子连成一个整体。由于答案可能很大,因此只需输出答案对1000000007取模的结果。

Solution

神仙dp。

我们先令g[i]表示在i这个状态中,随意连边的方案数,这个可以轻松的搞出来。

然后我们再考虑从状态中减去不合法的,我们可以考虑枚举子集,把当前集合强行分成不连通的两个集合,这样的方案数就是f[s]*g[s^i].

为了避免算重复,我们需要从集合中找出一个固定点,强制让这个点在S集合中,这样就不会出现我们在g[s^i]中算了一遍后又在g[s]算了一遍。

Code

#include<iostream>
#include<cstdio>
#define N 22
using namespace std;
const int mod=;
long long a[N][N],f[<<],g[<<];
int n;
int main(){
scanf("%d",&n);
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)scanf("%lld",&a[i][j]);
int ma=(<<n)-;
for(int i=;i<=ma;++i){
g[i]=;
for(int j=;j<=n;++j)if(i&(<<j-))
for(int k=j+;k<=n;++k)if(i&(<<k-))
(g[i]*=(a[j][k]+))%=mod;
}
for(int i=;i<=ma;++i){
for(int S=i&(i-);S;S=i&(S-))
if(!((S^i)&(i&-i)))(f[i]+=(f[S]*g[S^i])%mod)%=mod;
f[i]=((g[i]-f[i])%mod+mod)%mod;
}
printf("%lld",f[ma]);
return ;
}
 

bzoj2560串珠子(子集dp)的更多相关文章

  1. bzoj2560串珠子——子集DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2560 转载: 很明显的状压dp 一开始写的dp可能会出现重复统计的情况 而且难以去重 假设 ...

  2. bzoj2560串珠子 状压dp+容斥(?)

    2560: 串珠子 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 515  Solved: 348[Submit][Status][Discuss] ...

  3. $bzoj2560$ 串珠子 容斥+$dp$

    正解:容斥+$dp$ 解题报告: 传送门$QwQ$ $umm$虽然题目蛮简练的了但还是有点难理解,,,我再抽象一点儿,就说有$n$个点,点$i$和点$j$之间有$a_{i,j}$条无向边可以连,问有多 ...

  4. bzoj2560 串珠子 状压DP

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2560 题解 大概是这类关于无向图的联通性计数的套路了. 一开始我想的是这样的,考虑容斥,那么就 ...

  5. 2019.02.09 bzoj2560: 串珠子(状压dp+简单容斥)

    传送门 题意简述:nnn个点的带边权无向图,定义一个图的权值是所有边的积,问所有nnn个点都连通的子图的权值之和. 思路: fif_ifi​表示保证集合iii中所有点都连通其余点随意的方案数. gig ...

  6. [BZOJ2560]串珠子:状压DP+容斥原理

    分析 为什么我去年6月做过这道题啊,估计当时抄的题解. 具体做法就是令\(f[S]\)表示保证连通点集\(S\)的方案数,\(g[S]\)表示不保证连通点集\(S\)的方案数. 容易想到: \[g[S ...

  7. bzoj2560 串珠子

    Description 铭铭有n个十分漂亮的珠子和若干根颜色不同的绳子.现在铭铭想用绳子把所有的珠子连接成一个整体. 现在已知所有珠子互不相同,用整数1到n编号.对于第i个珠子和第j个珠子,可以选择不 ...

  8. 【题解】Bzoj2560串珠子

    挺强的……容斥+状压DP.首先想到如果可以求出f[k],f[k]代表联通状态为k的情况下的合法方案数,则f[k] = g[k] - 非法方案数.g[k]为总的方案数,这是容易求得的.那么非法方案数我们 ...

  9. 题解-bzoj2560 串珠子

    刚被教练数落了一通,心情不好,来写篇题解 Problem bzoj2560 题目简述:给定\(n\)个点的,每两个点\(i,j\)之间有\(c_{i,j}\)条直接相连的路(其中只能选一条或不选),问 ...

随机推荐

  1. SSH上传/下载本地文件到linux服务器

    在linux下一般用scp这个命令来通过ssh传输文件. 1.从服务器上下载文件 scp username@servername:/path/filename /var/www/local_dir(本 ...

  2. Django Rest framework 框架之解析器

    解析器 序列化***** 请求数据进行校验 对queryset进行序列化处理 分页 路由 视图 渲染器

  3. CodeForces 126B Password

    题目链接:http://codeforces.com/problemset/problem/126/B 题目大意: 多组数据每组给定1个字符串S,问是否存在S的一个尽量长的子串,同时是S的前缀和后缀, ...

  4. java之序列化

    详细内容 连接https://blog.csdn.net/qq_27093465/article/details/78544505 Java 之 Serializable 序列化和反序列化的概念,作用 ...

  5. python之路--内置函数03

    一 . 正则表达式 匹配字符串 元字符 . 除了换行 \w 数字, 字母, 下划线 \d 数字 \s 空白符 \n \t \b 单词的边界 \W 非xxx \D \S [ ] 字符组 or的关系 [^ ...

  6. git和svn的區別

    https://blog.csdn.net/bmicnj/article/details/78413058

  7. Vue之动态绑定CSS样式

    demo.html <!DOCTYPE html> <html lang="en" xmlns:v-bind="http://www.w3.org/19 ...

  8. 【.NET】.NET MVC4 微信扫一扫功能实现-附全部代码

    写在前面的    首先在调用微信的JS-SDK接口的时候需要仔细阅读一下官方的注意事项,否则可能事倍功半.这里先大概概述一下主要的流程,首先,使用微信扫一扫需要一个已经通过认证的公众号:其次,需要知道 ...

  9. Js--String、Date、Array对象

    /* * String 对象 属性 length 方法 */ //String的length属性 var strL = "abcde"; document.write(" ...

  10. ab与nc命令,tcpdump命令

    ab与nc命令,tcpdump命令 ab  -p post.txt  -T  application/json   "http://127.0.0.1:8083/main/index&quo ...