문제 읽어보니 고등학교 때 풀었던 중복 조합 문제였다. 어떤 개념을 써야 하는지는 바로 떠올랐지만 슬프게도 졸업한 지 오래라 기억이 나지 않았다. 그래서 다시 개념을 정리한 다음 풀어보았다.
모든 과일을 적어도 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;
}
'UCPC' 카테고리의 다른 글
[20/07/05] D. 십자가 찾기 (16924) (0) | 2020.07.09 |
---|---|
[20/07/05] C. 두찌 수열 (8922) (0) | 2020.07.09 |
[20/07/05] E. 부분수열의 합 (14225) (0) | 2020.07.09 |
[20/05/24] I 모노디지털 표현 (2287) (0) | 2020.05.30 |
[20/05/24] E 제곱근 작도 (5389) (0) | 2020.05.30 |