-
백준(BOJ) 12996번 Acka알고리즘 풀이/백준(Boj) 2019. 10. 13. 02:11
문제 : https://www.acmicpc.net/problem/12996
12996번: Acka
첫째 줄에 앨범에 포함된 곡의 개수 S와 dotorya, kesakiyo, hongjun7이 불러야 하는 곡의 수가 주어진다. (1 ≤ S ≤ 50, 1 ≤ dotorya, kesakiyo, hongjun7 ≤ S)
www.acmicpc.net
풀이 :
한 앨범당 가질수 있는 경우의 수는 7가지 이다
( a만 b만 c만 a,b만 a,c만 b,c만 a,b,c )
따라서 각각의 경우의 수를 모두 재귀호출 해준 후 중복은 메모이제이션으로 없애자.
코드 ( C++ )
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters#include <iostream> #include <cstring> using namespace std; const int mod = 1000000007; long long cache[51][51][51][51]; long long solve(int S, int a, int b, int c) { if (S == 0) { if (a == 0 && b == 0 && c == 0) { return 1; } else return 0; } if (a < 0 || b < 0 || c < 0) return 0; long long& ret = cache[S][a][b][c]; if (ret != -1) return ret; ret = 0; ret += solve(S - 1, a - 1, b, c); ret += solve(S - 1, a , b-1, c); ret += solve(S - 1, a, b, c-1); ret += solve(S - 1, a - 1, b-1, c); ret += solve(S - 1, a - 1, b, c-1); ret += solve(S - 1, a, b-1, c-1); ret += solve(S - 1, a - 1, b-1, c-1); ret %= mod; return ret; } int main() { int S, a, b, c; cin >> S >> a >> b >> c; memset(cache, -1, sizeof(cache)); cout << solve(S, a, b, c); } '알고리즘 풀이 > 백준(Boj)' 카테고리의 다른 글
백준(BOJ) 4연산 (31) 2019.10.16 백준(BOJ) 9944번 NxM 보드 완주하기 (0) 2019.10.13 백준(BOJ) 15562 톱니바퀴(2) (31) 2019.10.10 백준(BOJ) 2234번 성곽 (0) 2019.10.05 백준(BOJ) 1600번 말이 되고픈 원숭이 (63) 2019.10.03