zoukankan      html  css  js  c++  java
  • [题解] LuoguP6075 [JSOI2015]子集选取

    传送门

    ps: 下面(n)(k)好像和题目里的写反了。。。将就着看吧(qwq)

    暴力打个表答案就出来了?

    先写个结论,答案就是(2^{nk})

    为啥呢?

    首先你需要知道,因为一个集合是另一个集合的子集这个东西,集合中的一个元素对其他元素并不会有影响,完全可以把元素分开来看,然后将答案乘起来。

    那么转化成一个好像好解决点的问题,就是(k = 1)时怎么做。

    因为只有一个元素,在加上要求是(A_{i,j} subseteq A_{i-1,j},A_{i,j} subseteq A_{i,j-1}),所以这个三角矩阵一定是上面一部分有这个元素,而下面一部分没有,比方说两个用一个元素构成的满足要求的(5 imes 5)的三角矩阵

    (0表示该集合没有这个元素,1表示有)

    注意到虚线所描出来的轮廓,对于一个(n imes n)的三角矩阵,只有一个元素的方案数就是从左下角那个点走(n)步,每一步只能向上或向有走的方案数,因为这样走出的路径一定是一个合法的轮廓,轮廓的上面就代表有该元素,下面就没有。

    那么这样的方案数就是(2^n)

    因为有(k)种元素,所以乘起来就是(2^{nk})

    快速幂算一下就好了。

    (Code:)

    #include <bits/stdc++.h>
    using namespace std;
    const int P=1e9+7;
    inline int fpow(int x,int y){
    	int ret=1; for(x%=P;y;y>>=1,x=1ll*x*x%P)
    		if(y&1) ret=1ll*ret*x%P;
    	return ret;
    }
    int main(){
    	int n,m; scanf("%d%d",&n,&m);
    	printf("%d
    ",fpow(2,1ll*n*m%(P-1)));
    	return 0;
    }
    
  • 相关阅读:
    模板模式
    简单实用的代理模式
    享元模式
    外观模式(人人都懂的设计模式)
    设计模式之组合模式,温故而知新。
    .net设计模式之装饰模式
    全选、反选
    There is a cycle in the hierarchy解决
    JSONObject、JSONArray
    JsonMessageView工具类
  • 原文地址:https://www.cnblogs.com/wxq1229/p/12295145.html
Copyright © 2011-2022 走看看