一、对贪心算法的理解

  贪心算法的思想是在对问题求解时,总是做出在当前看来是最好的选择,并不从整体最优上加以考虑,所做出的选择只是在某种意义上的局部最优解。但贪心算法不是对所有问题都能得到整体最优解,问题需要满足贪心算法的性质,即只有当局部最优解与全局最优解一致时,才能用贪心算法求解。

二、汽车加油问题的贪心选择性质

  贪心策略:当汽车当前油量足以行驶至下一个加油站时继续行驶,反之,加油。

  代码如下:

 

#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;
} 

 

三、在本章学习过程中遇到的问题及结对编程的情况

  贪心算法的解题关键在于贪心策略的正确性,在第四章实践课上的会场安排问题,我们就是因为选择了错误的贪心策略,导致无法求出完全正确的解,在经过我和队友的讨论以及请教他人后,成功找到了反例,并重新选择贪心策略,最终得到问题的解。

posted on 2018-12-02 00:38  薪王的骨灰  阅读(130)  评论(0编辑  收藏  举报