zoukankan      html  css  js  c++  java
  • UVa11806 Cheerleaders

    容斥问题

    考虑上下左右四个边界只满足其中1/2/3/4个边界有人的情况,可以用组合数算。

    总共只有16种情况。

    可以用容斥原理求解。

     1 /*by SilverN*/
     2 #include<algorithm>
     3 #include<iostream>
     4 #include<cstring>
     5 #include<cstdio>
     6 #include<cmath>
     7 #include<vector>
     8 using namespace std;
     9 const int mod=1000007;
    10 const int mxn=510;
    11 int read(){
    12     int x=0,f=1;char ch=getchar();
    13     while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    14     while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}
    15     return x*f;
    16 }
    17 int n,m,k;
    18 int c[mxn][mxn];
    19 void init(){
    20     for(int i=0;i<=500;i++){
    21         c[i][0]=1;
    22         for(int j=1;j<=i;j++)
    23             c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
    24     }
    25     return;
    26 }
    27 int main(){
    28     int i,j;
    29     int T=read(),cas=0;
    30     init();
    31     while(T--){
    32         n=read();m=read();k=read();
    33         int ct,a,b;
    34         int ans=0;
    35         for(i=0;i<=15;i++){
    36             ct=0;a=n;b=m;
    37             if(i&1)a--,ct++;
    38             if(i&2)b--,ct++;
    39             if(i&4)a--,ct++;
    40             if(i&8)b--,ct++;
    41             if(ct&1) ans=((ans-c[a*b][k])%mod+mod)%mod;
    42             else (ans+=c[a*b][k])%=mod;
    43         }
    44         printf("Case %d: %d
    ",++cas,ans);
    45     }
    46     return 0;
    47 }
  • 相关阅读:
    CSP-S2019游记
    BZOJ4668 冷战
    [ZJOI2007]仓库建设
    CF833B The Bakery
    决策单调性优化DP+分治优化决策单调性
    穿越栅栏 Overfencing
    控制公司 Controlling Companies
    派对灯 Party Lamps
    CSP2019总结
    差分约束
  • 原文地址:https://www.cnblogs.com/SilverNebula/p/6273900.html
Copyright © 2011-2022 走看看