推销员阿明的螺丝街“疲劳之旅”:如何为不同X值积累最大疲劳值?
```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; // 定义住户结构体,包含距离和疲劳值 struct House { int distance; int fatigue; }; // 比较函数,按疲劳值从大到小排序 bool compare(const House& a, const House& b) { return a.fatigue > b.fatigue; } int main() { int N; cin >> N; vector<House> houses(N); // 读取每家住户到入口的距离 for (int i = 0; i < N; ++i) { cin >> houses[i].distance; } // 读取向每家住户推销产品的疲劳值 for (int i = 0; i < N; ++i) { cin >> houses[i].fatigue; } // 对于不同的X值进行计算 for (int X = 1; X <= N; ++X) { vector<House> selected = houses; // 按疲劳值从大到小排序 sort(selected.begin(), selected.end(), compare); int maxDistance = 0; int totalSalesFatigue = 0; // 选择前X个疲劳值最大的住户 for (int i = 0; i < X; ++i) { totalSalesFatigue += selected[i].fatigue; maxDistance = max(maxDistance, selected[i].distance); } // 计算总疲劳值,走路疲劳值为往返 int totalFatigue = 2 * maxDistance + totalSalesFatigue; cout << totalFatigue << endl; } return 0; } ``` 代码解释: 1. 结构体 `House`:定义了一个 `House` 结构体来存储每家住户的距离和疲劳值。 2. 比较函数 `compare`:用于对住户按疲劳值从大到小排序。 3. 数据读取:先读取住户数量 `N`,接着读取每家住户到入口的距离,再读取向每家住户推销产品的疲劳值。 4. 主循环:对于不同的 `X` 值(从 1 到 `N`)进行计算: - 创建一个 `selected` 向量,将所有住户复制到其中。 - 对 `selected` 向量按疲劳值从大到小排序。 - 选择前 `X` 个疲劳值最大的住户,计算推销的总疲劳值和最大距离。 - 计算总疲劳值,包括往返走路的疲劳值和推销的疲劳值。 5. 输出结果:输出每个 `X` 值对应的最大疲劳值。 ######[AI问答 | 627点数解答 | 2026-02-04 21:39:36]
- 无名杀“积累”技能代码揭秘:非摸牌阶段获牌不计手牌上限!(DeepSeek | 333点数解答 | 2025-03-04 21:42:18)113
- 高考毕业晚会难题:从学生能力值求最大默契程度的Python解法(字节豆包 | 487点数解答 | 2026-01-24 13:10:18)40
- 推销员阿明的螺丝街“疲劳之旅”:如何为不同X值积累最大疲劳值?(字节豆包 | 627点数解答 | 2026-02-04 21:39:36)25
- 深入解析格雷码生成算法:递归求解与代码实现(DeepSeek | 443点数解答 | 2026-01-05 12:21:49)50
- 深入探究:n 位格雷码中编号 k 二进制串的求解算法与实现(DeepSeek | 726点数解答 | 2026-01-13 12:31:37)51