Advertisement
Guest User

Untitled

a guest
Jun 27th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.32 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include <ext/pb_ds/assoc_container.hpp> // Common file
  3. #include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update
  4. using namespace std;
  5. using namespace __gnu_pbds;
  6. typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
  7. #define IO ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
  8.  
  9. const int N = 1000, M = 1000;
  10. int arr[N + 3][M + 3];
  11. int dp[N + 3][M + 3];
  12. int dx[] = {1, -1, 0, 0};
  13. int dy[] = {0, 0, 1, -1};
  14. int n, m;
  15.  
  16. bool isVal(int r, int c)
  17. {
  18. return r >= 1 && c >= 1 && r <= n && c <= m;
  19. }
  20.  
  21. int solve(int r, int c)
  22. {
  23. if(r > n || c > m)
  24. return 1e7;
  25. if(r == n && c == m)
  26. return arr[n][m];
  27. if(dp[r][c] != -1)
  28. return dp[r][c];
  29. int ans = 1e7;
  30. for(int i = 0; i < 4; i++)
  31. {
  32. int rr = r + dx[i], cc = c + dy[i];
  33. if(isVal(rr, cc))
  34. ans = min(ans, arr[r][c] + solve(rr, cc));
  35. }
  36. return dp[r][c] = ans;
  37. }
  38.  
  39. int main()
  40. {
  41. IO;
  42. int t;
  43. cin >> t;
  44. while(t--)
  45. {
  46. cin >> n >> m;
  47. for(int i = 1; i <= n; i++)
  48. {
  49. for(int j = 1; j <= m; j++)
  50. cin >> arr[i][j];
  51. }
  52. memset(dp, -1, sizeof dp);
  53. cout << solve(1, 1) << endl;
  54. }
  55. return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement