본문 바로가기

UCPC

[20/07/05] B. 과일서리 (17213)

문제 읽어보니 고등학교 때 풀었던 중복 조합 문제였다. 어떤 개념을 써야 하는지는 바로 떠올랐지만 슬프게도 졸업한 지 오래라 기억이 나지 않았다. 그래서 다시 개념을 정리한 다음 풀어보았다.

 

 

모든 과일을 적어도 1개는 훔친다고 했으므로 m에 n개를 뺀 다음 계산했다.

 

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <stack>
#include <set>
#include <map>
#define xx first
#define yy second
 
using namespace std;
using i64 = long long;
using ii = pair<int, int>;
using ii64 = pair<i64, i64>;

int com(int n, int r)
{
    if (n == r || r == 0)
        return 1;
    else
        return com(n-1, r-1) + com(n-1, r);
}

int main() {
    int n, m;
    scanf("%d %d", &n, &m);
    
    m -= n;
    printf("%d\n", com(n-1+m, m));
    
    return 0;
}