原文链接https://www.cnblogs.com/zhouzhendong/p/HDU5117.html

题目传送门 - HDU5117

题意

  $T$ 组数据。

  给你 $n$ 盏灯 ,$m$ 个开关,每一个开关对应的控制一些灯。所有可以控制某盏灯的开关被按了奇数次,那么这盏灯最终是亮着的,否则是不亮的。

  现在每一个开关都可以选择按或者不按。我们称对于所有开关都做出 按或者不按 的一种选择 为一种 方案。一种方案的价值是其最终情况下灯数 $x$ 的三次方,即 $x^3$ 。

  求所有方案的价值和。答案对 $10^9+7$ 取模。

  $n,m\leq 50$

题解

  这题的做法真 妙 

  我们设一个方案的最终结果中,第 $i$ 栈灯的亮暗情况为 $x_i$ ,其中 $x_i=0$ 表示暗。

  那么这个方案的价值显然为:

$$(\sum_{i=1}^n x_i)^3 = \sum_{i,j,k\in[1,n]}x_ix_jx_k $$

  于是我们考虑对于每一个 $(i,j,k)$ ,求一下他对于最后答案的贡献。然后全部加起来。

  那么这个贡献怎么求呢?

  我们考虑状压dp,令 $dp_{i,j}$ 表示已经处理了前 $i$ 个灯,当前三盏灯亮暗状态为 $j$ 的贡献和,那么转移显然很 simple 。这样 $dp_{i,(亮,亮,亮)}$   显然就是当前贡献。

  时间复杂度 $O(Tn^4)$ 。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=55,mod=1e9+7;
int T,n,m,dp[N][8];
LL a[N];
int main(){
scanf("%d",&T);
int Case=0;
while (T--){
scanf("%d%d",&n,&m);
memset(a,0,sizeof a);
for (int i=1,s,x;i<=m;i++){
scanf("%d",&s);
while (s--)
scanf("%d",&x),a[i]|=1LL<<x;
}
int ans=0;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
for (int k=1;k<=n;k++){
memset(dp,0,sizeof dp);
dp[0][0]=1;
for (int t=1;t<=m;t++){
int x=((a[t]>>i&1)<<2)|((a[t]>>j&1)<<1)|(a[t]>>k&1);
for (int p=0;p<8;p++){
dp[t][p]=(dp[t][p]+dp[t-1][p])%mod;
dp[t][p^x]=(dp[t][p^x]+dp[t-1][p])%mod;
}
}
ans=(ans+dp[m][7])%mod;
}
printf("Case #%d: %d\n",++Case,ans);
}
return 0;
}

  

HDU5117 Fluorescent 期望 计数 状压dp 动态规划的更多相关文章

  1. [BZOJ1494][NOI2007]生成树计数 状压dp 并查集

    1494: [NOI2007]生成树计数 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 793  Solved: 451[Submit][Status][ ...

  2. LightOJ - 1287 Where to Run —— 期望、状压DP

    题目链接:https://vjudge.net/problem/LightOJ-1287 1287 - Where to Run    PDF (English) Statistics Forum T ...

  3. 状态压缩动态规划 状压DP

    总述 状态压缩动态规划,就是我们俗称的状压DP,是利用计算机二进制的性质来描述状态的一种DP方式 很多棋盘问题都运用到了状压,同时,状压也很经常和BFS及DP连用,例题里会给出介绍 有了状态,DP就比 ...

  4. 动态规划专题(一)——状压DP

    前言 最近,决定好好恶补一下我最不擅长的\(DP\). 动态规划的种类还是很多的,我就从 状压\(DP\) 开始讲起吧. 简介 状压\(DP\)应该是一个比较玄学的东西. 由于它的时间复杂度是指数级的 ...

  5. 【xsy1596】旅行 期望+状压DP

    题目大意:有$m$个人要从城市$1$开始,依次游览城市$1$到$n$. 每一天,每一个游客有$p_i$的概率去下一个城市,和$1-p_i$的概率结束游览. 当游客到达城市$j$,他会得到$(1+\fr ...

  6. 2018.09.23 bzoj1076: [SCOI2008]奖励关(期望+状压dp)

    传送门 一道神奇的期望状压dp. 用f[i][j]f[i][j]f[i][j]表示目前在第i轮已选取物品状态为j,从现在到第k轮能得到的最大贡献. 如果我们从前向后推有可能会遇到不合法的情况. 所以我 ...

  7. 【BZOJ】1076 [SCOI2008]奖励关 期望DP+状压DP

    [题意]n种宝物,k关游戏,每关游戏给出一种宝物,可捡可不捡.每种宝物有一个价值(有负数).每个宝物有前提宝物列表,必须在前面的关卡取得列表宝物才能捡起这个宝物,求期望收益.k<=100,n&l ...

  8. BZOJ1076 [SCOI2008]奖励关 【状压dp + 数学期望】

    1076: [SCOI2008]奖励关 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 3074  Solved: 1599 [Submit][Sta ...

  9. Problem Arrangement ZOJ - 3777(状压dp + 期望)

    ZOJ - 3777 就是一个入门状压dp期望 dp[i][j] 当前状态为i,分数为j时的情况数然后看代码 有注释 #include <iostream> #include <cs ...

随机推荐

  1. mysql设计表时注意事项

    说明:本文是对项目过程中的一些要求的简单汇总整理,主要是供个人本身参考... 一.表设计 1. 在创建表结构时,表名.字段需要见名知意,不采用拼音 create table  `tb_abc` (   ...

  2. 5分钟搞定Nginx安装

      1. 安装gcc(centos 7之后一般已自带,可以在第6步失败后再安装) yum install gcc gcc-c++   2. 安装pcre yum install -y pcre pcr ...

  3. Android性能优化之图片压缩优化

    1 分类Android图片压缩结合多种压缩方式,常用的有尺寸压缩.质量压缩.采样率压缩以及通过JNI调用libjpeg库来进行压缩. 参考此方法:Android-BitherCompress 备注:对 ...

  4. 锤子科技"临死前"被"接盘" ,内部人士爆料已改签今日头条母公司

    就在昨天,据据锤子科技内部人士透露,部分锤子科技员工在昨天已经接到了相关的临时通知,要求改签劳动合同至今日头条的母公司——字节跳动.至于这是锤子科技真正再度复活还是借尸还魂都不重要,重要的是,作为忠实 ...

  5. 设置 Confluence 6 外部索引站点

    Confluence 并不能比较容易的对外部站点进行搜索,这个是因为 Confluence 使用的是 Lucene 内部查找,但是你还是有下面 2 个可选的方案: 嵌入外部页面到 Confluence ...

  6. selenium+python之 辨识alert、window以及操作

    1.分辨 首先区别下alert.window和伪装对话框: alert,浏览器弹出框,一般是用来确认某些操作.输入简单的text或用户名.密码等,根据浏览器的不同,弹出框的样式也不一样,不过都是很简单 ...

  7. 第二十单元 计划任务crond服务

    什么是计划任务:后台运行,到了预定的时间就会自动执行的任务,前提是:事先手动将计划任务设定好.这就用到了crond服务 crond服务相关的软件包[root@MiWiFi-R3-srv ~]# rpm ...

  8. 在前台根据传过来的XX级别的数字转XX的名字

    需求描述:进入页面,展示列表,列表中有个XX级别的项,数据库中的级别使用1234来存放的,现在要转成对应的一级XX,二级XX,三级XX,四级XX. 吐槽一下:正常的做法应该是在后台,就把查出来的级别1 ...

  9. java和python对比----实例化的对象属性:

    python 可以直接对实例化的属性进行赋值 class Test(): name = "小明" def __init__(self):{ //self.name = name; ...

  10. bzoj 3566

    非常好也是比较难的题 首先,不难看出这是一道树形的概率dp 那么我们就要考虑转移 我们发现,一个点能充上电的概率是这个点本身通电的概率+这个点的子节点给他传过来电的概率+这个点的父节点给他传过来电的概 ...