zoukankan      html  css  js  c++  java
  • 2018牛客多校第一场 A.Monotonic Matrix

    题意:

      给一个n*m的矩阵赋值(0,1,2)。使得每个数都不小于它左面和上面的数。

    题解:

      构建0和1的轮廓线。对于单独的轮廓线,共需要往上走n步,往右走m步。有C(n+m,n)种方式。

      两个轮廓线的总情况是C(n+m,n)*C(n+m,n)种方式。但是还要去重掉相交的情况。

      假设将0轮廓线向左上平移一个单位,那么此时两个轮廓线既不能相交也不能重合。

      假设0轮廓线是从A到B,1轮廓线是从C到D。那么相交的情况可以理解成从A到D,从C到B。情况数是C(n+m,n-1)*C(n+m,m-1)

      总答案就是C(n+m,n)*C(n+m,n)-C(n+m,n-1)*C(n+m,m-1)

    #include <bits/stdc++.h>
    using namespace std;
    const int N = 2001;
    const int mod = 1e9+7;
    typedef long long ll;
    int n, m;
    int C[N][N];
    int main() {
        C[1][0] = C[1][1] = 1;  
        for(int i = 2; i < N; i++){  
            C[i][0] = 1;  
            for(int j = 1; j < N; j++)  
            C[i][j] = (C[i-1][j]+C[i-1][j-1])%mod;  
        }  
        while(~scanf("%d%d", &n, &m)) {
            printf("%d
    ", ((1ll*C[n+m][n]*C[n+m][n])%mod-(1ll*C[n+m][n-1]*C[n+m][m-1])%mod+mod)%mod);
        }
    } 
    View Code
  • 相关阅读:
    偶然闪退的排查
    ANTI-INFLAMMATORY FOODS
    健康餐
    PSORIASIS-7 THINGS TO AVOID
    eczema: improve or reverse your eczema
    VL10 or VL10A前台操作
    装修设计
    春运高速记录 1/15/2020
    rman 备份并异机恢复
    RMAN冷备份、一致性备份脚本
  • 原文地址:https://www.cnblogs.com/Pneuis/p/9340797.html
Copyright © 2011-2022 走看看