fork download
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <algorithm>
  5. #include <cassert>
  6.  
  7. #define FOR(i,a,b) for(int i=a;i<b;i++)
  8. #define REP(i,b) FOR(i,0,b)
  9.  
  10. using namespace std;
  11.  
  12. int dp[100][100][100];
  13. char board[100][100][101];
  14.  
  15. int main(){
  16. int n, r, c;
  17. scanf("%d%d%d", &n, &r, &c);
  18. REP(k, n){
  19. REP(i, r){
  20. scanf("%s", board[k][i]);
  21. fill(dp[k][i], dp[k][i] + c, 1000000000);
  22. }
  23. }
  24. dp[0][0][0] = 0;
  25. REP(k, n){
  26. REP(i, r){
  27. REP(j, c){
  28. if (j < c - 1){
  29. if (board[k][i][j + 1] == 'H')
  30. dp[k + 1][i][j + 1] = min(dp[k][i][j] + board[k + 1][i][j + 1] - '0', dp[k + 1][i][j + 1]);
  31. else
  32. dp[k][i][j + 1] = min(dp[k][i][j] + board[k][i][j + 1] - '0', dp[k][i][j + 1]);
  33. }
  34. if (i < r - 1){
  35. if (board[k][i + 1][j] == 'H')
  36. dp[k + 1][i + 1][j] = min(dp[k][i][j] + board[k + 1][i + 1][j] - '0', dp[k + 1][i + 1][j]);
  37. else
  38. dp[k][i + 1][j] = min(dp[k][i][j] + board[k][i + 1][j] - '0', dp[k][i + 1][j]);
  39. }
  40. }
  41. }
  42. }
  43. printf("%d\n", dp[n - 1][r - 1][c - 1]);
  44. }
Success #stdin #stdout 0s 8312KB
stdin
3 3 3
06H
H14
257
337
15H
2H8
829
653
470
stdout
9