1. 程式人生 > >2016廣東工業大學新生杯決賽:Problem G: 神偷TMK後續

2016廣東工業大學新生杯決賽:Problem G: 神偷TMK後續

Problem G: 神偷TMK後續

Description

TMK十分喜歡打CS,據說GDUTACM新生杯的一等獎的獎品的星際CS的真人CS遊戲團體券,他毅然報了名。 然而TMK等不及決賽的來臨,希望能早日可以玩真人CS。於是TMK打算把真人CS遊戲團體券從師兄那裡偷出來。 幾聽打探,TMK發現真人CS遊戲團體券鎖在了工一730的保險箱裡面。但是他不知道密碼。他突然想起了yfq給了他一個錦囊,當有困難的時候開啟來看。 錦囊裡面的紙條上有一串小寫字母"abhcujzqacehbfjkbacxmcnjkaecfiallcxcbbcad",TMK靈機一動,密碼應該是這串字母出現最多的字母和第二多的字母按字典序連線在一起吧。於是TMK在密碼箱上按下了那兩個字母,保險箱開了。 TMK發現裡面有n張星際CS的真人CS遊戲團體券,但tmk只想拿k張,因為tmk覺得拿太多就會沒時間學習了。 現在問TMK一共有多少種取法

Input

題目包含多組資料,每組測試資料包含一行,兩個數n和k(1<=n<=10,0<=k<=n)

Output

每組測試資料包含一個整數表示TMK的取法

Sample Input

3 2 3 0

Sample Output

3 1

思路:

預處理, 當 m == 0 || n == m 時, 初始化為1, 其餘的C(n, m) = C(n - 1, m - 1) + C(n - 1, m)。

程式碼:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cctype>
#include<cstdio>
#include<set>
#include<cmath>
#include<string>
using namespace std;

int c[15][15];

void init(){
    for(int i = 1; i <= 13; i++){
        for(int j = 0; j <= i; j++)
            if(i == j || j == 0)
                c[i][j] = 1;
            else
                c[i][j] = c[i - 1][j] + c[i - 1][j - 1];
    }
}

int main(){
    int n, m;
    init();
    while(~scanf("%d %d", &n, &m))
        cout<<c[n][m]<<endl;
    return 0;
}