light oj 1005 - Rooks(组合数学)

简介: 组合数学解法 现在n行中选出m行,C(n,m),再在n列中选出m列随便放A(n,m),答案为C(n,m)*A(n,m)。

题目链接

题意:在一个n*n的棋盘上放m个车,使得各个车之间不相互攻击。有多少种放法?


组合数学解法

  现在n行中选出m行,C(n,m),再在n列中选出m列随便放A(n,m),答案为C(n,m)*A(n,m)。

#include <stdio.h>
#include <string.h>
typedef __int64 LL;
LL A(int n, int m)
{
    LL ans = 1;
    for (int i = n-m+1; i <= n; i++)
        ans *= i;
    return ans;
}
LL C(int n, int m)
{
    LL ans = 1;
    for (int i = 1; i <= m; i++)
        ans = ans*(n-i+1)/i;
    return ans;
}
int main()
{
    int t, m, n;
    scanf("%d", &t);
    for (int i = 1; i <= t; i++)
    {
        LL ans;
        scanf("%d %d", &n, &m);
        if (m <= n)
            ans = C(n, m)*A(n, m);
        else
            ans = 0;
        printf("Case %d: %I64d\n",i, ans);
    }
    return 0;
}
目录
相关文章
|
6月前
|
程序员
老程序员分享:MT【202】内准圆
老程序员分享:MT【202】内准圆
25 0
老程序员分享:MT【202】内准圆
|
7月前
|
C++ iOS开发
|
机器学习/深度学习 存储
light oj 1011 - Marriage Ceremonies (状态压缩+记忆化搜索)
light oj 1011 - Marriage Ceremonies (状态压缩+记忆化搜索)
45 0
light oj 1159 - Batman LCS
学过简单动态规划的人应该对最长公共子序列的问题很熟悉了,这道题只不过多加了一条字符串变成三条了,还记得,只要把状态变成三维的即可。
36 0
|
算法
light oj 1047 - Neighbor House 动态规划
动态规划,这个和刘汝佳算法竞赛入门经典P158的数字三角形有些相似,不过是求最小的值,而且有些限制,每次走到点和上次走的点不在同一列。
33 0
Light oj 1112 - Curious Robin Hood(树状数组)
有n个数,有m组操作,1 i表示将第i个数先输出,然后置0, 2 i v 表示给第i个数加上v, 3 i j 表示求i 到 j 的和,注意,这里数组是从0开始的,而我们构造的树状数组是从1 开始的,使用在程序中要进行一定的处理。
45 0
HDOJ/HDU 1328 IBM Minus One(水题一个,试试手)
HDOJ/HDU 1328 IBM Minus One(水题一个,试试手)
106 0
|
Java BI 机器学习/深度学习