一、对贪心算法的理解
贪心算法的思想是在对问题求解时,总是做出在当前看来是最好的选择,并不从整体最优上加以考虑,所做出的选择只是在某种意义上的局部最优解。但贪心算法不是对所有问题都能得到整体最优解,问题需要满足贪心算法的性质,即只有当局部最优解与全局最优解一致时,才能用贪心算法求解。
二、汽车加油问题的贪心选择性质
贪心策略:当汽车当前油量足以行驶至下一个加油站时继续行驶,反之,加油。
代码如下:
#include <iostream> using namespace std; int main() { int n, k; cin >> n >> k; int a[k + 2]; for (int i = 1; i <= k + 1; i++) cin >> a[i]; int count = 0; int b = 0; int flag = 1; for (int i = 1; i <= k + 1; i++) { if (b + a[i] <= n) { b += a[i]; } else { if (b == 0) { flag = 0; break; } b = a[i]; count++; } } if (flag) cout << count << endl; else cout << "No Solution!\n"; return 0; }
三、在本章学习过程中遇到的问题及结对编程的情况
贪心算法的解题关键在于贪心策略的正确性,在第四章实践课上的会场安排问题,我们就是因为选择了错误的贪心策略,导致无法求出完全正确的解,在经过我和队友的讨论以及请教他人后,成功找到了反例,并重新选择贪心策略,最终得到问题的解。