• 2016 China Final H


    /*************************************************************************
        > File Name: H.cpp
        > Author: LyuCheng
        > Created Time: 2017-12-02 19:29
        > Description: 
            题意:一个n×m的矩阵,填[1,k]的数,一个格子如果是所在行,列,严格最
                的,那么这个格子叫做Great cell,求segma(g=0...n*m)((g+1)*Ag)
                Ag是有g个Great cell的填法
            思路:式子化简为 segma(g=0...n*m)(g*Ag)+segma(g=0..n*m)(Ag);
                后一项就是所有Ag的和,也就是总的状态为 k^(n+m),前一项为
                segma(g=0...n*m)(Ag+Ag+...Ag)(总共有g个) 也就是说每一个方案数
                里面有g个Great cell,每一个Great cell对总结果贡献1,所以,
                最后就是 所有格子作为Great cell的情况的总和
     ************************************************************************/
    
    #include <bits/stdc++.h>
    
    #define MOD 1000000007
    #define LL long long
    
    using namespace std;
    
    int t;
    int n,m,k;
    LL res;
    
    inline LL power(LL a,LL b){
        if(b==0)
            return 1;
        LL cnt=power(a,b/2);
        cnt=cnt*cnt%MOD;
        if(b&1) cnt=cnt*a%MOD;
        return cnt;    
    }
    
    inline void init(){
        res=0;
    }
    
    int main(){
        scanf("%d",&t);
        for(int ca=1;ca<=t;ca++){
            printf("Case #%d: ",ca);    
            init();
            scanf("%d%d%d",&n,&m,&k);
            if(n==1&&m==1){
                printf("%d
    ",2*k);
                continue;
            }
            res+=power(k,n*m);
            res%=MOD;
            for(int i=1;i<=k;i++){
                res+=((n*m)%MOD*power(i-1,n+m-2)%MOD*power(k,(n-1)*(m-1))%MOD)%MOD;
                res%=MOD;
            }
            printf("%d
    ",res);    
        }
        return 0;
    }
  • 相关阅读:
    【寒假集训系列DAY.1】
    【专题系列】单调队列优化DP
    【DP悬线法】奶牛浴场
    [DP专题]悬线法
    【牛客网周赛32】个人解题思路
    【专题】概率期望DP
    牛客练习赛41D(思维转化)
    洛谷3199(01分数规划、判负环)
    洛谷4377(01分数规划)
    ZOJ3068(01分数规划)
  • 原文地址:https://www.cnblogs.com/wuwangchuxin0924/p/7955434.html
Copyright © 2020-2023  润新知