fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <numeric>
  4. #include <algorithm>
  5.  
  6. // std::vector<std::vector<int>> triangle =
  7. // {{3, -1, -1, -1},
  8. // {7, 4, -1, -1},
  9. // {2, 4, 6, -1},
  10. // {8, 5, 9, 3}};
  11.  
  12. std::vector<std::vector<int>> problem =
  13. {{75},
  14. {95, 64},
  15. {17, 47, 82},
  16. {18, 35, 87, 10},
  17. {20, 4, 82, 47, 65},
  18. {19, 1, 23, 75, 3, 34},
  19. {88, 2, 77, 73, 7, 63, 67},
  20. {99, 65, 4, 28, 6, 16, 70 ,92},
  21. {41, 41, 26, 56, 83, 40, 80, 70, 33},
  22. {41, 48, 72, 33, 47, 32, 37, 16, 94, 29},
  23. {53, 71, 44, 65, 25, 43, 91, 52, 97 ,51 ,14},
  24. {70, 11, 33, 28, 77, 73, 17, 78, 39, 68, 17, 57},
  25. {91, 71, 52, 38, 17, 14, 91, 43, 58, 50, 27, 29, 48},
  26. {63, 66, 4, 68 ,89, 53, 67, 30, 73, 16, 69, 87, 40, 31},
  27. {4, 62, 98, 27, 23, 9, 70, 98, 73, 93, 38, 53, 60, 4, 23}};
  28.  
  29. int euler_18(std::vector<std::vector<int>> data) {
  30. std::reverse(data.begin(), data.end());
  31. std::vector<int> head = data[0];
  32. std::vector<std::vector<int>> tail(data.size() - 1);
  33. std::copy(data.begin() + 1, data.end(), tail.begin());
  34. return std::accumulate(tail.begin(), tail.end(), head,
  35. [](std::vector<int> v0, std::vector<int> v1){
  36. std::vector<int> u0(v0.size() - 1);
  37. std::vector<int> w0(v0.size() - 1);
  38. std::vector<int> u1(v1.size());
  39. std::copy(v0.begin(), v0.end() - 1, u0.begin());
  40. std::copy(v0.begin() + 1, v0.end(), w0.begin());
  41. for (unsigned long i = 0; i < v1.size(); i++) {
  42. u1[i] = std::max(v1[i] + u0[i], v1[i] + w0[i]);
  43. }
  44. return u1;
  45. })[0];
  46. }
  47.  
  48. int main(void){
  49. std::cout << euler_18(problem) << std::endl;
  50. return 0;
  51. }
  52.  
Success #stdin #stdout 0.01s 5396KB
stdin
Standard input is empty
stdout
1074