/********************************************************************************************
*description:龙与地下城游戏
* 给定一个二维数组map,表示一张地图,
* 骑士从左上角出发,每次只能向右或向下走,最后到达右下角见到公主
* map每个位置数字,正数代表加血,负数代表有怪兽减血,骑士血量不能少于1
* 为保证骑士能见到公主,初始血量最少是多少?
*description:龙与地下城游戏
* 给定一个二维数组map,表示一张地图,
* 骑士从左上角出发,每次只能向右或向下走,最后到达右下角见到公主
* map每个位置数字,正数代表加血,负数代表有怪兽减血,骑士血量不能少于1
* 为保证骑士能见到公主,初始血量最少是多少?
*******************************************************************************************/
#include<iostream>
#include<vector>
using namespace std;
//方法:时间复杂度O(M*N),空间复杂度O(M*N)
//经典动态规划问题,创建与map同大的二维数组dp[M][N]
//dp[i][j]代表骑士走上[i,j]位置且从该位置走到右下角需要的最低血量,最终需要的结果是dp[0][0]
//dp[M-1][N-1],骑士走上最终位置需要的最低血量=
// 1,当map[M-1][N-1]>=0
// 1-map[M-1][N-1],当map[M-1][N-1]<0
//dp[M-1][j]最后一行=max(1, dp[M-1][j+1]-map[M-1][j]
//dp[i][N-1]最后一列=ma