fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6. typedef pair<int, int> ii;
  7.  
  8. const int INF = 1e9;
  9. const ll LINF = 1e18;
  10.  
  11. template<typename T>
  12. void maximize(T& a, const T& b) {
  13. if (a < b) a = b;
  14. }
  15.  
  16. const int N = 1e2 + 5;
  17.  
  18. int n, m;
  19. int a[N][N];
  20. int dp[N][N]; // dp[i][j] = Đường đi có tổng lớn nhất xuất phát từ một ô ở cột 1 đi đến ô (i, j)
  21.  
  22. int main() {
  23. ios::sync_with_stdio(false);
  24. cin.tie(nullptr);
  25. cin >> n >> m;
  26.  
  27. for (int i = 1; i <= n; i++) {
  28. for (int j = 1; j <= m; j++) cin >> a[i][j];
  29. }
  30.  
  31. for (int j = 1; j <= m; j++) {
  32. for (int i = 1; i <= n; i++) {
  33. int& cur = dp[i][j];
  34. if (j == 1) {
  35. cur = a[i][j];
  36. continue;
  37. }
  38. cur = -INF;
  39. if (i > 1) {
  40. maximize(cur, dp[i - 1][j - 1] + a[i][j]);
  41. }
  42. maximize(cur, dp[i][j - 1] + a[i][j]);
  43. if (i + 1 <= n) {
  44. maximize(cur, dp[i + 1][j - 1] + a[i][j]);
  45. }
  46. }
  47. }
  48.  
  49. int ans = -INF;
  50. for (int i = 1; i <= n; i++) maximize(ans, dp[i][m]);
  51.  
  52. cout << ans << '\n';
  53. }
Success #stdin #stdout 0.01s 5280KB
stdin
5 7
9 -2 6 2 1 3 4
0 -1 6 7 1 3 3
8 -2 8 2 5 3 2
1 -1 6 2 1 6 1
7 -2 6 2 1 3 7
stdout
41