zoukankan      html  css  js  c++  java
  • UVA 11806 Cheerleaders

    今天推了好久的一题,就是在矩形中放点,边界上必须有点。用数学语言就是:在一定数内取排列,其中某几段内必须有数被取。比!赛完以后才发现白书二代里面有原题,思路就是U-!A-!B-……+!A!B+!B!C+……   就是数学中的容斥原理。

     1 #include <cstdio>
     2 const int Mod = 1e6+7;
     3 const int K = 500;
     4 int C[K+10][K+10];
     5 int main()
     6 {
     7     for(int i = 0; i <= K; i++)
     8     {
     9         C[i][0] = C[i][i] = 1;
    10         for(int j = 1; j < i; j++)
    11             C[i][j] = (C[i-1][j]+C[i-1][j-1])%Mod;
    12     }
    13     int T,m,n,k,r,c,b,s,ans,cas=1;
    14     scanf("%d",&T);
    15     while(T--)
    16     {
    17         scanf("%d%d%d",&n,&m,&k);
    18         ans = 0;
    19         for(s = 0; s < 16; s++)
    20         {
    21             b = 0; r=n; c=m;
    22             if(s&1){r--;b++;}
    23             if(s&2){r--;b++;}
    24             if(s&4){c--;b++;}
    25             if(s&8){c--;b++;}
    26             if(b&1) ans = (ans-C[r*c][k])%Mod;
    27             else ans = (ans+C[r*c][k])%Mod;
    28         }
    29         ans = (ans+Mod)%Mod;
    30         printf("Case %d: %d\n",cas++,ans);
    31     }
    32     return 0;
    33 }
  • 相关阅读:
    自己写库—构建库函数雏形
    暑假第二周计划
    初学Oracle
    暑假第一周计划
    读书笔记六
    读书笔记五
    读书笔记四
    读书笔记三
    读书笔记
    系统目标文档
  • 原文地址:https://www.cnblogs.com/lzxskjo/p/3034789.html
Copyright © 2011-2022 走看看