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