zoukankan      html  css  js  c++  java
  • HDU5117 Fluorescent 期望 计数 状压dp 动态规划

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

    题目传送门 - HDU5117

    题意

      $T$ 组数据。

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

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

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

      $n,mleq 50$

    题解

      这题的做法真 妙 

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

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

    $$(sum_{i=1}^n x_i)^3 = sum_{i,j,kin[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
    ",++Case,ans);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    isMemberOf与isKindOf的区别
    当你的工程出现了问题,在别的电脑上可以正常运行。你该怎么做。。
    iOS 声明属性关键字的总结
    UISegmentedControl方法与属性的总结
    UILabel与UIFont的用法和属性的一些总结
    UIActivityIndicatorView控件的属性和方法
    第四百六十一天 how can I 坚持
    《Java基础知识》Java集合(Collection)
    《Java基础知识》Java线程的概念
    《Java基础知识》Java断言
  • 原文地址:https://www.cnblogs.com/zhouzhendong/p/HDU5117.html
Copyright © 2011-2022 走看看