fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. int min_result = 1000000000;
  7. int max_result = -1000000000;
  8.  
  9. void dfs(vector<int> &number, vector<int> &oper, int temp, int index){
  10.  
  11. if(index == number.size()){
  12. min_result = min(min_result, temp);
  13. max_result = max(max_result, temp);
  14. return;
  15. }
  16.  
  17. if(oper[0]>0){ // 덧셈
  18. oper[0]--;
  19. dfs(number, oper, temp+number[index], index+1);
  20. oper[0]++;
  21. }
  22. if(oper[1]>0){ // 뺄셈
  23. oper[1]--;
  24. dfs(number, oper, temp-number[index], index+1);
  25. oper[1]++;
  26. }
  27. if(oper[2]>0){ // 곱셈
  28. oper[2]--;
  29. dfs(number, oper, temp*number[index], index+1);
  30. oper[2]++;
  31. }
  32. if(oper[3]>0){ // 나눗셈
  33. oper[3]--;
  34. dfs(number, oper, temp/number[index], index+1);
  35. oper[3]++;
  36. }
  37.  
  38. }
  39.  
  40. int main() {
  41. int n;
  42.  
  43. scanf("%d", &n);
  44.  
  45. vector<int> number;
  46. vector<int> oper;
  47.  
  48. for(int i=0; i<n; i++){
  49. int temp;
  50. scanf("%d", &temp);
  51. number.push_back(temp);
  52. }
  53.  
  54. for(int i=0; i<4; i++){
  55. int temp;
  56. scanf("%d", &temp);
  57. oper.push_back(temp);
  58. }
  59.  
  60. dfs(number, oper, number[0], 1);
  61. printf("%d\n%d", max_result, min_result);
  62.  
  63. return 0;
  64. }
Success #stdin #stdout 0s 4368KB
stdin
6
1 2 3 4 5 6
2 1 1 1
stdout
54
-24