练习题-123

6447. 给墙壁刷油漆

记忆化搜索
f[i][t] 表示为粉刷前 i 堵墙,总耗时为 t 的最小开销。

对于每堵墙 i,可以选择付费或者免费,如果付费,花费的时间为 time[i];如果免费,花费的时间视为 -1。那么,答案就是对于所有 t ≥ 0, f[n][t] 的最小值。采用 “刷表法” 进行状态更新:

免费粉刷:f[i][t]→f[i+1][t−1]
付费粉刷:f[i][t]→f[i+1][t+time[i]]

注意!当 t ≥ n 时,已经可以把后续的所有墙都用免费的粉刷匠来刷了,因此所有 t ≥ n 的状态和状态 t = n 等效,也就是说,对于每个 i,可以只保留 t = -n \sim nt=−n∼n 总共 2n + 1 个状态。这样总的时间复杂度是 n2

1269. 停在原地的方案数

dp[i][j] 表示在 i 步操作之后,指针位于下标 j 的方案数。

你可能感兴趣的:(算法精选,动态规划,算法,leetcode)