• Problem C. 欧皇 ————2019.10.12


    题目:

     

     

     

     

     

     

     

     

     再次感激土蛋

     1 #include <bits/stdc++.h>
     2  
     3 using namespace std;
     4  
     5 typedef long long ll;
     6 const ll mod = 1e9 + 7;
     7 ll C[1005][1005];
     8  
     9 void pre(){
    10     C[0][0] = 1;
    11     for(int i = 1; i <= 1000; i ++){
    12         C[i][0] = 1;
    13         for(int j = 1; j <= i; j ++){
    14             C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % mod;
    15         }
    16     }
    17 }
    18 int n, m, c;
    19 int a[105];
    20 ll f[11][31][31];
    21 ll g[11][31][31], h[11][31][31];
    22 int main(){
    23     freopen("europe.in", "r", stdin);
    24     freopen("europe.out", "w", stdout);
    25     
    26     scanf("%d%d%d", &n, &m, &c);
    27     for(int i = 1; i <= c; i ++){
    28         scanf("%d", &a[i]);
    29     }   
    30     pre();
    31     for(int k = 1; k <= c; k ++){
    32         for(int i = 1; i <= n; i ++){
    33             for(int j = 1; j <= m; j ++){
    34                 h[k][i][j] = C[i * j][a[k]];
    35                 ll flag = -1;
    36                 for(int jj = j - 1; jj >= 1; jj --){
    37                     h[k][i][j] = (h[k][i][j] + C[j][jj] * C[i * jj][a[k]] % mod * flag + mod) % mod;
    38                     flag = -flag;
    39                 }
    40             }
    41         }
    42     }
    43     for(int k = 1; k <= c; k ++){
    44         for(int j = 1; j <= m; j ++){
    45             for(int i = 1; i <= n; i ++){
    46                 g[k][i][j] = h[k][i][j];
    47             //  printf("%d %d %d %lld
    ", k, i, j, g[k][i][j]);
    48                 ll flag = -1;
    49                 for(int ii = i - 1; ii >= 1; ii --){
    50                     g[k][i][j] = (g[k][i][j] + C[i][ii] * h[k][ii][j] % mod * flag + mod) % mod;
    51                     flag = -flag;
    52                 }
    53             //  printf("%d %d %d %lld
    ", k, i, j, g[k][i][j]);
    54             }
    55         }
    56     }
    57     f[0][0][0] = 1;
    58     for(int k = 1; k <= c; k ++){
    59         for(int i = 1; i <= n; i ++){
    60             for(int j = 1; j <= m; j ++){
    61                 for(int ii = 0; ii <= i - 1; ii ++){
    62                     for(int jj = 0; jj <= j - 1; jj ++){
    63                         if((i - ii) * (j - jj) < a[k]) continue;
    64                         f[k][i][j] = (f[k][i][j] + C[i][i - ii] * C[j][j - jj] % mod * f[k - 1][ii][jj] % mod * g[k][i - ii][j - jj]) % mod;
    65                     }
    66                 }
    67             }
    68         }
    69     }
    70     ll ans = 0;
    71     for(int i = 1; i <= n; i ++){
    72         for(int j = 1; j <= m; j ++){
    73             ans = (ans + C[n][i] * C[m][j] % mod * f[c][i][j]) % mod;
    74         }
    75     }
    76     //printf("%d %d %d
    ", n, m, c); 
    77     printf("%lld
    ", ans);
    78     return 0;
    79 }
    View Code
  • 相关阅读:
    Python全栈-第六课 学习笔记
    python基础 day27 装饰器函数classmethod、staticmethod
    python基础 day26 面向对象-super方法、封装、property装饰器、反射
    python基础 day25 面向对象-继承2
    python基础 day24 面向对象-继承1
    python基础 day23 面向对象2
    python基础 day22 面向对象
    python基础 day21 递归函数、shutil模块
    python基础 day20 re模块、带参数的装饰器
    python基础 day19 正则表达式
  • 原文地址:https://www.cnblogs.com/ydclyq/p/11662002.html
Copyright © 2020-2023  润新知