• uva11806 Cheerleaders


    题目大意:

    n行m列网格放k个石子。有多少种方法?要求第一行,第一列,最后一行,最后一列必须有石子。

    /*
        利用容斥原理。可以转到求“第一行、第一列、最后一行、最后一列没有石子”的方案数。
        枚举各个集合的组合时可以借助二进制进行枚举
    */
    #include<iostream>
    #include<cstdio>
    using namespace std;
    #define mod 1000007
    int t,n,m,k,c[510][510],Case;
    int main(){
        for(int i=0;i<=500;i++){
            c[i][0]=c[i][i]=1;
            for(int j=1;j<i;j++)
                c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
        }
        scanf("%d",&t);
        while(t--){
            Case++;
            scanf("%d%d%d",&n,&m,&k);
            int ans=0;
            for(int i=0;i<16;i++){
                int b=0,n1=n,m1=m;
                if(i&1){n1--;b++;}
                if(i&2){n1--;b++;}
                if(i&4){m1--;b++;}
                if(i&8){m1--;b++;}
                if(b&1)ans=(ans+mod-c[n1*m1][k])%mod;
                else ans=(ans+c[n1*m1][k])%mod;
            }
            printf("Case %d: %d
    ",Case,ans);
        }
    }
  • 相关阅读:
    简单测试
    纸玫瑰
    Java 字符串编码 (保存成txt测试)
    创建 Filter
    jee中文名图片+tomcat ==> 中文乱码的另类处理(未成功)
    dom4j_01_02
    dom4j_01_01
    Java 字符串编码
    websocket

  • 原文地址:https://www.cnblogs.com/thmyl/p/7435308.html
Copyright © 2020-2023  润新知