#include<bits/stdc++.h>
int helper(vector<vector >dungeon,int x,int y,int m,int n,int sum,int sumMin) {
static int ans = INT_MIN;
if( x>=m || y >= n )
return ans;
sum += dungeon[x][y];
sumMin = min(sum,sumMin);
if(x == m-1 && y== n-1) {
if(ans < sumMin) {
ans = sumMin;
}
return ans;
}
helper(dungeon,x+1,y,m,n,sum,sumMin);
helper(dungeon,x,y+1,m,n,sum,sumMin);
return ans;}
class Solution {
public:
int calculateMinimumHP(vector<vector>& dungeon) {
int x = 0,y = 0,sum = 0;
int a = helper(dungeon,x,y,dungeon.size(),dungeon[0].size(),sum,INT_MAX );
if(a>0)
return 1;
int ans = (1 -a);
return ans;
}};