LightOj 1005

lightoj 1005

題目大意:

n×n 的棋盤裏擺放k 個車,要求任意兩個不在同一行同一列,問有幾種方法;

思路:

n×n 個裏挑一個,n1×n1 個裏挑一個…共挑取k 個,再除去他們的順序;

sum=nk+1ni2k

即:
sum=(nk)nk+1ni
#include <iostream>
#include <cstdio>
#define LL long long

using namespace std;

LL c[50][50];

void init()
{
    for (int i = 0; i <= 31; i++)
    {
        c[i][0] = 1;
    }

    for (int i = 1; i <= 31; i++)
    {
        for (int j = 1; j <= i; j++)
        {
            c[i][j] = c[i - 1][j - 1] + c[i - 1][j];
        }
    }
} 

int main()
{
    init();

    int T;
    scanf("%d", &T);

    for (int cas = 1; cas <= T; cas++)
    {
        LL n, k;
        scanf("%lld%lld", &n, &k);

        printf("Case %d: ", cas);

        if (n < k)
        {
            printf("0\n");
            continue;
        }

        LL sum;
        sum = c[n][k];

        while (k--)
        {
            sum *= n;
            n--;
        }

        printf("%lld\n", sum);
    }

    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章