• 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
  • 相关阅读:
    http协议的状态码——400,401,403,404,500,502,503,301,302等常见网页错误代码
    JS中的动态合集与静态合集
    对联
    诗词
    文言文
    Youth Is Not a Time of Life
    JS探秘——那些你理解存在偏差的问题
    JS中的加号+运算符详解
    支持HTTP2协议
    银行卡信息查询接口
  • 原文地址:https://www.cnblogs.com/Pneuis/p/9340797.html
Copyright © 2020-2023  润新知