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] = { {1, 3, 9}, {1, 9, 3}, {3, 1, 9}, {3, 9, 1}, {9, 1, 3}, {9, 3, 1} };
  5.  
  6. struct A {
  7. int a, b, c;
  8. };
  9. queue<A> q;
  10.  
  11. int solve(int a, int b, int c){
  12. visited[a][b][c] = 1;
  13. q.push({a, b, c});
  14.  
  15. while(q.size()){
  16. int a = q.front().a;
  17. int b = q.front().b;
  18. int c = q.front().c;
  19. q.pop();
  20. for(int i = 0; i < 6; i++){
  21. int na = max(0, a - ap[i][0]);
  22. int nb = max(0, b - ap[i][1]);
  23. int nc = max(0, c - ap[i][2]);
  24. if(visited[na][nb][nc]) continue;
  25. visited[na][nb][nc] = visited[a][b][c] + 1;
  26. q.push({na, nb, nc});
  27. }
  28.  
  29. if(visited[0][0][0]) break;
  30. }
  31. return visited[0][0][0];
  32. }
  33.  
  34. int main(){
  35. cin >> n;
  36. for(int i = 0; i < n; i++){
  37. cin >> a[i];
  38. }
  39. cout << solve(a[0], a[1], a[2]) << '\n';
  40. }
Success #stdin #stdout 0s 5316KB
stdin
3
12 10 4
stdout
3