DP错题总结

1. 地下城游戏

思路
这道题从前往后要同时保证当前房间最低血量和路径最低血量。所以倒着来,从后往前,这样只需要保证房间最低学量,因为路径最低血量不管是多少都能到达最后终点(从终点来的)

动态转移方程:dp[i][j]=max(min(dp[i+1][j],dp[i][j+1])−dungeon(i,j),1)
最终答案即为 dp[0][0]
边界条件为,dp[n−1][m−1] 转移需要用到的 dp[n-1][m]和 dp[n][m-1]均为无效值,因此我们给这两个值赋值为 1

这里 -dungeon[i][j]是因为:dp表示是需要的最低血量,当前房间血量是3,那么最低要求的血量就是-3,反之如果房间血量是-5,是说明要求勇士有更多血,所以最低血量还需要+5

PS:其实这题里面因为要求是正整数所以才max(…,1),换成0最后+1也一眼。

代码:

class Solution:
    def calculateMinimumHP(self, dungeon: List[List[int]]) -> int:
        n, m = len(dungeon), len(dungeon[0])
        BIG = 10**9
        dp = [[BIG] * (m + 1) for _ in range(n + 1)]
        dp[n][m - 1] = dp[n - 1][m] = 1
        for i in range(n - 1, -1, -1):
            for j in range(m - 1, -1, -1):
                minn = min(dp[i + 1][j], dp[i][j + 1])
                dp[i][j] = max(minn - dungeon[i][j], 1)

        return dp[0][0]

时间复杂度:O(N×M),其中 N,MN,M 为给定矩阵的长宽。

空间复杂度:O(N×M),其中 N,MN,M 为给定矩阵的长宽,注意这里可以利用滚动数组进行优化,优化后空间复杂度可以达到 O(N)O(N)。

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

### C/C++ 蓝桥杯竞赛省级一等奖刷题计划 #### 1. 平台选择 对于希望冲击蓝桥杯省级一等奖的学生来说,首选练习平台应为官方指定在线评测系统——蓝桥云课。该平台上不仅有历年真题可供参考,还有详细的解题思路和解析[^1]。 #### 2. 时间规划 以两个月为例,在此期间内需合理分配时间用于学习基础知识、强化训练以及模拟测试。初期阶段重点掌握数据结构与常用算法;中期通过大量实战演练提升速度与准确性;后期则侧重于查漏补缺并调整心态迎接比赛[^2]。 #### 3. 学习路径 - **专题突破**:针对不同类型的题目(如字符串处理、动态规划等),集中精力攻克难点; - **真题演练**:定期完成整套试卷形式的模拟考试,培养考场感觉; - **错题总结**:建立个人专属的知识盲区档案,反复复习直至完全理解误原因。 #### 4. 推荐资料 除了利用上述提到的蓝桥云课外,还可以借助其他优质开源项目或书籍辅助自学过程。例如《挑战程序设计竞赛》这本书籍非常适合用来提高编程能力,并且书中涵盖了丰富的实例分析可以帮助参赛者更好地应对实际问题。 ```cpp // 示例代码片段展示如何解决经典背包问题 #include <iostream> using namespace std; const int maxn = 1e5 + 7; int dp[maxn], w[maxn], v[maxn]; void knapsack(int n, int W){ for (int i=1; i<=n; ++i) for (int j=W; j>=w[i]; --j) dp[j]=max(dp[j],dp[j-w[i]]+v[i]); } int main(){ int N,W; cin>>N>>W; for(int i=1;i<=N;++i)cin>>w[i]>>v[i]; knapsack(N,W); cout<<dp[W]<<endl; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值