fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int n, a[3], visited[61][61][61];
  4. int ap[6][3] = {
  5. {1, 3, 9},
  6. {1, 9, 3},
  7. {3, 1, 9},
  8. {3, 9, 1},
  9. {9, 1, 3},
  10. {9, 3, 1}
  11. };
  12.  
  13. struct A {
  14. int a, b, c;
  15. };
  16. queue<A> q;
  17.  
  18. int solve(int a, int b, int c){
  19. q.push({a, b, c});
  20. visited[a][b][c] = 1;
  21. while(q.size()){
  22. int a = q.front().a;
  23. int b = q.front().b;
  24. int c = q.front().c;
  25. q.pop();
  26.  
  27. if(a == 0 && b == 0 && c == 0) break;
  28.  
  29. for(int i = 0; i < 6; i++){
  30. int na = max(0, a - ap[i][0]);
  31. int nb = max(0, b - ap[i][1]);
  32. int nc = max(0, c - ap[i][2]);
  33. if(visited[na][nb][nc]) continue;
  34. visited[na][nb][nc] = visited[a][b][c] + 1;
  35. solve(na, nb, nc);
  36. }
  37. }
  38. return visited[0][0][0] - 1;
  39. }
  40.  
  41. int main(){
  42. cin >> n;
  43. for(int i = 0; i < n; i++){
  44. cin >> a[i];
  45. }
  46. cout << solve(a[0], a[1], a[2]) << '\n';
  47. }
Success #stdin #stdout 0s 5320KB
stdin
3
12 10 4
stdout
0