zoukankan      html  css  js  c++  java
  • HDU

    Chess

     
     Accepts: 1805
     
     Submissions: 5738
     Time Limit: 2000/1000 MS (Java/Others)
     
     Memory Limit: 32768/32768 K (Java/Others)
    Problem Description

    車是中国象棋中的一种棋子,它能攻击同一行或同一列中没有其他棋子阻隔的棋子。一天,小度在棋盘上摆起了许多車……他想知道,在一共N×M个点的矩形棋盘中摆最多个数的車使其互不攻击的方案数。他经过思考,得出了答案。但他仍不满足,想增加一个条件:对于任何一个車A,如果有其他一个車B在它的上方(車B行号小于車A),那么車A必须在車B的右边(車A列号大于車B)。

    现在要问问你,满足要求的方案数是多少。

    Input

    第一行一个正整数T,表示数据组数。

    对于每组数据:一行,两个正整数N和M(N<=1000,M<=1000)。

    Output

    对于每组数据输出一行,代表方案数模1000000007(1e9+7)。

    Sample Input
    1
    1 1
    Sample Output
    1
    

    这题第一反应是搜索,不过看到方案数的范围就知道肯定超时。因为每种方案都是一种排列组合,于是直觉就想到了杨辉三角,索性手写了几个样例,把较小的几种方案列出来,果然找到了规律。

    规律:(n,m)方案数    ps:n,m满足对称性

    (1,1)  (1,2)  (1,3)  (1,4)  (1,5)  (1,6)

       1       2       3       4       5       6

             (2,2)  (2,3)  (2,4)  (2,5)  (2,6)

                1       3       6       10     15

                       (3,3)  (3,4)  (3,5)  (3,6)

                         1       4       10     20

                                (4,4)  (4,5)  (4,6)

                                  1       5       15

                                          (5,5)  (5,6)

                                           1       6

                                                   (6,6)

                                                    1

    很显然,方案数就是一个倒置的杨辉三角。a[i][j]=a[i-1][j-1]+a[i][j-1]

    #include<stdio.h>
    #include<stdlib.h>
    
    long long a[1005][1005];
    
    int main()
    {
        int t,n,m,i,j;
        for(i=0;i<=1000;i++){
            a[0][i]=1;
        }
        for(i=1;i<=1000;i++){
            for(j=i;j<=1000;j++){
                a[i][j]=a[i-1][j-1]+a[i][j-1];
                if(a[i][j]>=1000000007) a[i][j]%=1000000007;
            }
        }
        scanf("%d",&t);
        while(t--){
            scanf("%d%d",&n,&m);
            if(n<m) printf("%lld
    ",a[n][m]);
            else printf("%lld
    ",a[m][n]);
        }
        return 0;
    }
  • 相关阅读:
    Note/Solution 转置原理 & 多点求值
    Note/Solution 「洛谷 P5158」「模板」多项式快速插值
    Solution 「CTS 2019」「洛谷 P5404」氪金手游
    Solution 「CEOI 2017」「洛谷 P4654」Mousetrap
    Solution Set Border Theory
    Solution Set Stirling 数相关杂题
    Solution 「CEOI 2006」「洛谷 P5974」ANTENNA
    Solution 「ZJOI 2013」「洛谷 P3337」防守战线
    Solution 「CF 923E」Perpetual Subtraction
    KVM虚拟化
  • 原文地址:https://www.cnblogs.com/yzm10/p/7354237.html
Copyright © 2011-2022 走看看