https://www.acmicpc.net/problem/4811
4811번: 알약
입력은 최대 1000개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄이며, 병에 들어있는 약의 개수 N ≤ 30 가 주어진다. 입력의 마지막 줄에는 0이 하나 주어진다.
www.acmicpc.net
W가 N개, H가 N개로 이루어진 2N개 짜리의 문자열을 몇 개 만들 수 있는지 구하는 문제이다. 그러나 알약을 반으로 쪼개기 전에는 반쪽짜리를 먹을 수 없기 때문에 항상 문자열에서 W의 개수가 H의 개수보다 많아야 한다.
길찾기 문제에서 대각선 위쪽으로 움직이는 경우를 항상 고려해주면 된다.
아니면 그냥 DP 이차원 배열을 만들어준뒤 i가 W의 개수, j가 H의 개수로 하여 특정 조건만 집어넣어 주면 된다.
#include <cstdio>
#include <cstring>
using namespace std;
long long int DP[32][32];
int main(void){
int n, N;
memset(DP, 0, 32*32*sizeof(long long int));
DP[1][1]=1;
for(int i=1; i<=31; i++){
for(int j=1; j<=31; j++){
if(i>j)
DP[i][j] = 0;
else if(!(i==1 && j==1))
DP[i][j] = (DP[i-1][j] +DP[i][j-1]);
}
}
while(1){
scanf("%d", &N);
if(N==0)
break;
else
printf("%lld\n", DP[N+1][N+1]);
}
}
'알고리즘 문제' 카테고리의 다른 글
[C/C++ 백준 16198번] 에너지 모으기 (Silver 1) (0) | 2020.09.02 |
---|---|
[C/C++ 백준 11868번] 님 게임 2 (Platinum 4) (0) | 2020.09.01 |
[C/C++ 백준 1756번] 피자 굽기 (Gold 5) (0) | 2020.08.30 |
[C/C++ 백준 2630번] 색종이 만들기 (Silver 3) (0) | 2020.08.29 |
[C/C++ 백준 1992번] 쿼드트리 (Silver 1) (0) | 2020.08.29 |