Dungeon game

 1 int calculateMinimumHP(vector<vector<int>>& dungeon) {
 2     if (dungeon.size() == 0)
 3         return 0;
 4     int end_x = dungeon.size() - 1;        //
 5     int end_y = dungeon[0].size() - 1;  //
 6     vector<vector<int>> dp(dungeon.size(), vector<int>(dungeon[0].size()));
 7     if (dungeon[end_x][end_y] < 0)    
 . 8          DP [end_x] [end_y] = - Dungeon [end_x] [end_y];
 . 9      the else 
10          DP [end_x] [end_y] = 0 ;
 . 11      for ( int J = end_y- . 1 ; J> = 0 ; --j )     // for each column of the last row are processed 
12 is      {
 13 is          DP [end_x] [J] DP = [end_x] [+ J . 1 ] - Dungeon [end_x] [J];
 14          IF (DP [end_x] [J] < 0 )
 15              DP [end_x] [J] = 0 ;
 16      }
 . 17  
18 is      for (int i = end_x - 1; i >= 0; --i)
19     {
20         dp[i][end_y] = dp[i+1][end_y] - dungeon[i][end_y];
21         if (dp[i][end_y] < 0)
22             dp[i][end_y] = 0;
23     }
24     for (int i = end_x - 1; i >= 0; --i)
25     {
26         for (int j = end_y - 1; j >= 0; --j)
27         {
28             dp[i][j] = min(dp[i + 1][j], dp[i][j + 1]) - dungeon[i][j];
29             if (dp[i][j] < 0)
30                 dp[i][j] = 0;
31         }
32     }
33     return dp[0][0] + 1;    
34 }

Dynamic programming equation

dp[i][j]=max(1,min(dp[i+1][j],dp[i][j+1])-dungeon[i][j]);

Guess you like

Origin www.cnblogs.com/zouma/p/11502338.html