1. 核心特征
多路径依赖:通常存在两种或多种移动/操作方式(如:平放、爆发技能、资源恢复)。
资源限制:操作之间共用一种或多种资源(如:时间、魔法值、体力)。
时效性:必须在规定的时间内(或步数内)达到目标。
2. 常见解题策略:
A.优先爆发平滑模型(本题采用)
适用场景:一种策略(技能)明显优于另一种(跑步),但受到资源(蓝量)限制。
逻辑:
分层处理:先只考虑“最强策略”及其配套的“资源恢复”方案,更新一遍最优解数组。
平滑修正:再用“基础策略”去修正每一秒的状态。因为基础策略不消耗资源,它是保底收益。
特点:代码实现最简洁。
例题:洛谷:守望者的逃离
https://www.luogu.com.cn/problem/P1095
#include<iostream> #include<iomanip> #include<vector> #include<algorithm> #include<cstring> #include<stack> #include<unordered_map> #include<unordered_set> #include<map> #include<cmath> #include<math.h> #include<string> #include<array> #include<sstream> #include<tuple> #include<queue> #include<climits> using namespace std; int main() { int M, S, T; cin >> M >> S >> T; vector<int>d(T + 1, 0); for (int t = 1; t <= T; ++t) { if (M >= 10) { M -= 10; d[t] = d[t - 1] + 60; } else { d[t] = d[t - 1]; M += 4; } } for (int t = 1; t <= T; ++t) { d[t] = max(d[t], d[t - 1] + 17); if (d[t] >= S) { cout << "Yes" << endl << t << endl; return 0; } } cout << "No" << endl << d[T] << endl; return 0; }