[[TableOfContents]] = ì˜¤ëŠ˜ì˜ ë¬¸ì œ = * [https://www.acmicpc.net/problem/1301|비즈 공예] = ì°¸ê°€ìž = * 15ì´ì›ì¤€ = 코드 = == 15ì´ì›ì¤€ == {{{ #include<iostream> #include<cstring> using namespace std; long long int dp[12][12][12][12][12][6][6] = {0,}; long long int arr[5] = {0,}; long long int n; long long int search(long long int now[5], long long int p1, long long int p2){ if(now[0] + now[1] + now[2] + now[3] + now[4] == 0){ return 1; } if(dp[now[0]][now[1]][now[2]][now[3]][now[4]][p1][p2] != -1){ return dp[now[0]][now[1]][now[2]][now[3]][now[4]][p1][p2]; } long long int ans = 0; for(long long int i = 0; i<n; i++){ if(!now[i]){ continue; } if(p1 == i || p2 == i){ continue; } now[i]--; ans += search(now, p2,i); now[i]++; } dp[now[0]][now[1]][now[2]][now[3]][now[4]][p1][p2] = ans; return ans; } int main(){ cin>>n; for(long long int i = 0; i<n; i++){ scanf("%d", &arr[i]); } memset(dp,-1,sizeof(dp)); long long int ans = 0; for(long long int i = 0; i<n; i++){ for(long long int j = 0; j<n; j++){ if(i == j){ continue; } if(!arr[i] || !arr[j]){ continue; } arr[i]--; arr[j]--; ans += search(arr,i,j); arr[i]++; arr[j]++; } } cout << ans<<endl; } }}} = ì•„ì´ë””ì–´ = == 15ì´ì›ì¤€ == * dp c1 c2 c3 c4 c5 p1 p2 : ci는 i번째 ë³´ì„ì˜ ê°¯ìˆ˜, p2는 ì´ì „ ë³´ì„, p1ì€ ì§€ê¸ˆë³´ì„ * searchì—서 arr i 는 ì´ì „ì „ ë³´ì„ ì´ì „ì— i번째 ë³´ì„ì˜ ê°¯ìˆ˜ì´ê³ p1ì€ ì´ì „ ë³´ì„, p2는 지금 ë³´ì„ * iê°€ p1, p2와 ë‹¤ë¥´ê³ i번째 ë³´ì„ì´ ë‚¨ì•„ìžˆë‹¤ë©´ i번째 ë³´ì„ì„ í•˜ë‚˜ ë¹¼ê³ -> iê°€ p2바로 ì „ ë³´ì„ì´ ë˜ê³ p2ê°€ 현 ë³´ì„ì´ ë˜ëœë‹¤.