题目链接:HDU-5117

题意为有n盏灯,m个开关,每个开关控制着\( k_{i} \)灯。X为最后亮着的灯的个数,要求出\( E(X^{3} ) * 2^{M} mod (10^9 + 7) \)。

可以看出\(  E(X^{3} ) * 2^{M} = \sum (X^{3} * (\frac{1}{2})^{m}) * 2^{m} = \sum X^{3} \)

然后将 \(   \sum X^{3}  \) 分解为\( \sum X^{3} = \sum_{i,j,k = 1}^{n} x_{i} * x_{j} * x_{k}  \)

于是问题就转化成了求对于所有的i,j,k,有多少种情况i,j,k都亮着。

于是我们可以写出状态转移方程f[i][j][k][state][ii] = f[i][j][k][state][ii-1] + f[i][j][k][state ^ \( switch_{ii}\)][ii-1];

其中f[i][j][k][state][ii]表示使用前ii个开关使i,j,k的状态为state的方案数。

我们发现i,j,k其实没有必要记录。所以进一步,我们可以把方程优化为f[state][ii] = f[state][ii-1] + f[state ^ switch[ii]][ii-1];

另外还有一个需要注意的小细节是注意使用1LL。

代码如下:

 #include<cstdio>
#include<set>
#include<map>
#include<cstring>
#include<algorithm>
#include<queue>
#include<iostream>
using namespace std;
typedef long long LL; const LL MOD = 1e9 + ;
const LL MAXN = ;
LL d[MAXN];
int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
#endif
LL t;
scanf("%lld",&t);
for(LL tt = ; tt <= t; tt++)
{
memset(d,,sizeof(d));
LL n,m;
scanf("%lld%lld", &n, &m);
for(LL i = ; i <= m; i++)
{
LL k;
scanf("%lld", &k);
for(LL j = ; j <= k; j++)
{
LL tmp;
scanf("%lld", &tmp);
d[i] += (1LL << (tmp-));
}
}
LL ans=;
for(LL i = ; i <= n; i++)
for(LL j = ; j <= n; j++)
for(LL k = ; k <= n; k++)
{
LL f[][MAXN];
memset(f,,sizeof(f));
f[][]=;
for(LL ii = ; ii <= m; ii++)
{
LL ss=;
if(d[ii] & (1LL << (i-))) ss ^= ;
if(d[ii] & (1LL << (j-))) ss ^= ;
if(d[ii] & (1LL << (k-))) ss ^= ;
for(LL jj=;jj<=;jj++)
{
f[jj][ii] += f[jj][ii-];
f[jj][ii] += f[jj ^ ss][ii - ];
}
}
ans = (ans + f[][m]) % MOD;
//printf("%lld %lld %lld %lld\n", i, j, k, ans);
}
printf("Case #%lld: %lld\n", tt, ans);
}
return ;
}

HDU 5117 Fluorescent的更多相关文章

  1. 动态规划(DP计数):HDU 5117 Fluorescent

    Matt, a famous adventurer who once defeated a pack of dire wolves alone, found a lost court. Matt fi ...

  2. HDU - 5117 Fluorescent(状压dp+思维)

    原题链接 题意 有N个灯和M个开关,每个开关控制着一些灯,如果按下某个开关,就会让对应的灯切换状态:问在每个开关按下与否的一共2^m情况下,每种状态下亮灯的个数的立方的和. 思路1.首先注意到N< ...

  3. HDU 5117 Fluorescent (数学+状压DP)

    题意:有 n 个灯,初始状态都是关闭,有m个开关,每个开关都控制若干个.问在m个开关按下与否的2^m的情况中,求每种情况下亮灯数量的立方和. 析:首先,如果直接做的话,时间复杂度无法接受,所以要对其进 ...

  4. HDU 5117:Fluorescent(状压DP + 思维)***

    题目链接 题意 给出n个灯,m个开关,每个开关控制一些灯,如果打开这个开关,这个开关控制的灯如果本来灭的就会亮,如果本来亮的就会灭.问在每个开关按下与否的一共2^m情况下,每种状态下亮灯的个数的立方的 ...

  5. hdu 5117 数学公式展开 + dp

    题目大意:有n个灯泡,m个按钮,(1 <= n, m <= 50),每个按钮和ki 个灯泡相关, 按下后,转换这些灯泡的状态,问你所有2^m的按下按钮的 组合中亮着的灯泡的数量的三次方的和 ...

  6. 2014ACM/ICPC亚洲区北京站题解

    本题解不包括个人觉得太水的题(J题本人偷懒没做). 个人觉得这场其实HDU-5116要比HDU-5118难,不过赛场情况似乎不是这样.怀疑是因为老司机带错了路. 这套题,个人感觉动态规划和数论是两个主 ...

  7. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  9. hdu 4859 海岸线 Bestcoder Round 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...

随机推荐

  1. html的body内标签之input系列1

    1. Form的作用:提交当前的表单. 类似于去了银行提交的纸质单子,递到后台去办理相关业务. text,password只有输入的功能:button,submit只有点击的功能.想要把这些信息提交, ...

  2. CenOS shell脚本

    1.先查看脚本解释器 [es@bigdata-senior01 ~]$ echo $SHELL /bin/bash 2.编写最简单的脚本 vi test.sh#第一行的脚本声明(#!)用来告诉系统使用 ...

  3. openjudge666:放苹果—题解

    (测试这里的markdown,同时也有纪念意义吧--第一次写的题解) 当时刚学递推的时候做的一道题 oj上的666题 666:放苹果 总时间限制: 1000ms 内存限制: 65536kB 描述 把M ...

  4. HDOJ.1228 A + B (map)

    A + B 点我挑战题目 点我一起学习STL-MAP 题意分析 讲字符串和数字用map对应即可 代码总览 /* Title:HDOJ.1228 Author:pengwill Date:2016-11 ...

  5. 我们自己写的solr查询的代码作为search项目中的dao

    我们自己写的solr查询的代码作为search项目中的dao,但是启动时会报错: 其实就是说 searchServiceImpl 中我们 Autowired 的 SearchDao 类 spring ...

  6. POJ3177:Redundant Paths(并查集+桥)

    Redundant Paths Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 19316   Accepted: 8003 ...

  7. 移动端1px边框问题

    用于手机端受dpr的影响,实际开发中,PC端和移动端展示的效果不太一样,往往在PC端显示的是1px,移动端常常是偏粗一些. 解决办法: 主要是用到伪类及缩放.在需要画边框的元素上,设置一个伪类,它的伪 ...

  8. webstorm常用功能快捷方式

    1 自动注释和撤销注释:ctrl+/ 在一句代码前面用 ctrl+/ 可以自动注释和撤销注释,js,html都可以,很好的省去了敲注释符的时间 (mac下为command+/,下同) 2 自动补全ht ...

  9. Inner join case when

    SELECT ( ), wn.ActualWorkflowNumber) + ' ' + wi.SN ) AS SN , wi.RecordID , wi.WorkflowName , wc.Work ...

  10. 东方14ACM小组 Challenge 11

    总时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  262144kB 描述 给一个长为N的数列,有M次操作,每次操作是以下两种之一: (1)修改数列中的一个数 (2)求 ...