C++ 破解“国王游戏”弱化版:贪心排序算法巧求最少最大奖赏
这是一个经典的贪心算法问题,需要找到大臣的排列顺序使得获得最多金币的大臣的金币数尽可能少。关键在于确定排序的规则。 解题思路 1. 排序规则:为了使最大金币数最小,应该按照大臣的左右手乘积升序排列。即对于两个大臣i和j,如果i.left * i.right < j.left * j.right,则i排在j前面。 2. 计算金币:遍历排序后的大臣,维护前面所有大臣左手数值的乘积,计算当前大臣的金币数,并更新最大值。 C++代码实现 ```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; struct Minister { int left; int right; int product; }; bool compare(const Minister &a, const Minister &b) { return a.product < b.product; } int main() { int n; cin >> n; int king_left, king_right; cin >> king_left >> king_right; vector<Minister> ministers(n); for (int i = 0; i < n; ++i) { cin >> ministers[i].left >> ministers[i].right; ministers[i].product = ministers[i].left * ministers[i].right; } sort(ministers.begin(), ministers.end(), compare); int max_coins = 0; int product = king_left; for (int i = 0; i < n; ++i) { int coins = product / ministers[i].right; if (coins > max_coins) { max_coins = coins; } product *= ministers[i].left; } cout << max_coins << endl; return 0; } ``` 代码解释 1. 输入处理:读取大臣人数n,国王的左右手数值,以及每位大臣的左右手数值。 2. 排序准备:计算每位大臣左右手的乘积,存储在`product`字段中。 3. 排序:根据`product`字段对大臣进行升序排序。 4. 计算最大金币数: - 初始化`product`为国王的左手数值。 - 遍历排序后的大臣,计算当前大臣的金币数(前面所有人左手乘积除以当前大臣右手数值)。 - 更新最大金币数`max_coins`。 - 更新`product`为当前大臣左手数值的乘积。 5. 输出结果:打印最大金币数。 这种方法确保在最优的排列顺序下,最大金币数尽可能小。 ######[AI问答 | 550点数解答 | 2025-04-28 18:16:50]
- 超燃年会来袭!诗舞歌戏轮番上阵,共赴欢乐盛宴! (字节豆包 | 206点数解答 | 2025-01-08 10:59:43)343
- C++ 破解“国王游戏”弱化版:贪心排序算法巧求最少最大奖赏(DeepSeek | 550点数解答 | 2025-04-28 18:16:50)396
- 巧妙贪心排序:解决国王游戏中大臣奖赏最大化问题(DeepSeek | 1002点数解答 | 2025-05-10 20:58:15)192
- C++ 实现:用贪心算法解国王游戏(弱化版),使大臣获赏最大值最小(DeepSeek | 507点数解答 | 2025-05-10 20:59:01)173
- CSP - J组:小核桃将积木堆成不超m堆的最小能量计算及代码详解(字节豆包 | 780点数解答 | 2026-02-07 18:38:58)19
- 高考毕业晚会难题:从学生能力值求最大默契程度的Python解法(字节豆包 | 487点数解答 | 2026-01-24 13:10:18)40
- Python 实现贪心算法:巧解找零钱问题及需注意要点 (字节豆包 | 398点数解答 | 2025-01-04 18:06:11)118
- 2024 STEMA T6:解密T1188超难密码锁,Python区间DP解法揭秘!(字节豆包 | 718点数解答 | 2025-11-08 22:09:01)93
- DotA 1vN 难题:巧用贪心策略最小化 HP 损耗!(DeepSeek | 609点数解答 | 2026-01-01 00:14:47)26
- P1016禾木分核桃问题:巧用贪心算法求解最少分配核桃数(字节豆包 | 404点数解答 | 2026-02-07 18:37:04)26
- 探秘各类游戏:多样玩法带来不同乐趣!(字节豆包 | 77点数解答 | 2025-05-04 01:10:38)167
- Python代码实现:带窗口、滚轴、重力、惯性与怪物的类马里奥游戏(字节豆包 | 964点数解答 | 2025-06-13 19:11:12)194