#include<cstdio>
int main(void)
{
int n, m, t;
int val[30][30]={0};
scanf("%d", &t);
for(int test=0; test<t; test++)
{
scanf("%d%d", &n, &m);
for(int j=0; j<m; j++)
{
val[0][j] = j+1;
}
for(int i=1; i<n; i++)
{
for(int j=i; j<m; j++)
{
val[i][j] = val[i][j-1] + val[i-1][j-1];
}
}
printf("%d\n", val[n-1][m-1]);
}
return 0;
}
이런저런 생각을 하다가 엉뚱한데 시간을 보냈지만, 그림을 그려보면 왼쪽에 i개 오른쪽에 j개가 있을 때의 경우의 수는, 왼쪽 i, 오른쪽에 j-1개 있을 때와 왼쪽에 i-1개 오른쪽에 j-1개 있을 때의 합과 같다.
오른쪽이 하나 적었을 경우와, 오른쪽이 추가 되었을 때, 왼쪽의 가장 큰 것이 오른쪽을 포함하는 경우를 더하면 된다.
알고리즘 분류 : 다이나믹 프로그래밍
Artikel Menarik Lainnya
경로찾기 | 백준 11403번
#include <iostream>
using namespace std;
int main() {
int n;
int graph[100][100];
ci
위상정렬 | Topological sort
위상정렬이라는 것은, 문제를 풀때 참 많이 쓰이는 기본적인 알고리즘이다.
위상 정렬은 DAG 그래프를 기본으로 사용되는데, DAG(Directed Acyclic Graph
타일 채우기 | 백준 2133번
#include<cstdio>
int main(void)
{
int n;
int result[31]={0};
int sum=0;// sum =
2차원 배열의 부분합 구하기배열은 프로그래밍에서 가장 많이 쓰이는 자료구조 중 하나입니다. 그만큼 배열을 잘 다루는 것이 프로그래밍을 잘 하는 것이자, 개발이나 여러 문제 해결에 도움이 되는 측면이 크죠.
보물 | 백준 1026번
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
in
설탕배달 | 백준 2839번
#include <cstdio>
int main() {
int n, result=0;
for(scanf("%d", &n); ; n-=3, res
EmoticonEmoticon