https://leetcode.com/problems/dungeon-game/description/

【题意】

给定m*n的地牢,王子初始位置在左上角,公主在右下角不动,王子要去救公主,每步只能往右或往下走一格。每个格子是一个整数,负数代表生命值减掉相应分数,正数表示生命值增加相应分值,要保证王子在走的过程中不挂掉,即经过每个格子后的生命值大于等于1,问王子最初的生命值最少是多少。

【思路】

倒着推dp,计算(i,j)->(m,n)的可生存血量。

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

【AC】

 class Solution {
public:
int calculateMinimumHP(vector<vector<int>>& dungeon) {
int m=dungeon.size();
int n=dungeon[].size();
const int inf=0x3f3f3f3f;
vector<vector<int> > dp(m+,vector<int>(n+));
for(int i=;i<=m;i++){
for(int j=;j<=n;j++){
dp[i][j]=inf;
}
}
dp[m-][n-]=max(,-dungeon[m-][n-]);
for(int k=m+n-;k>=;k--){
for(int i=;i<m;i++){
int j=k-i;
if(j<||j>=n) continue;
dp[i][j]=max(,min(dp[i][j+],dp[i+][j])-dungeon[i][j]);
}
}
return dp[][];
}
};

最新文章

  1. c#资料
  2. HTML5在移动端开发的12大特性
  3. Guava 是个风火轮之函数式编程(3)——表处理
  4. CentOS下Redis安装配置小结
  5. input屏蔽历史记录
  6. shellKali Linux Web 渗透测试— 初级教程(第三课)
  7. Django 中的用户认证
  8. 《linux性能及调优指南》
  9. Java学习--Equals与“==”
  10. POJ 2208 Pyramids 欧拉四面体
  11. 随机矩阵(stochastic matrix)
  12. 谦先生的程序员日志之我的hadoop大数据生涯一
  13. 【PAT】A1034Head of a Gang
  14. 第一次接触Android Studio
  15. 试试Markdown哈
  16. 第六次作业———numpy数据集练习
  17. JavaScript面试技巧之数组的一些不low操作
  18. Maven- 自动导入包的方法-很多没有导入的类,如何处理
  19. 转自高手关于SQL 锁的叙述。。(nolock,rowlock,tablock,xlock,paglock)
  20. 补充NTP知识的初中高

热门文章

  1. 你知道现在的.net是什么样的吗,一张图告诉你
  2. GP SQL 优化
  3. Synchronized关键字整理
  4. mask rcnn和roi-align
  5. Python 类变量,成员变量,静态变量,局部变量
  6. python基础面试题整理---从零开始 每天十题(01)
  7. vue-music:歌词的其他功能
  8. 对于js运动中产生的问题
  9. java 获取计算机内存
  10. Django ORM字段和字段参数