第四章作业

1.你对贪心算法的理解(2分)

定义:贪心算法是指在每一步求解的步骤中,它要求“贪婪”的选择最佳操作,并希望通过一系列的最优选择,能够产生一个问题的(全局的)最优解。

特征:

(1)可行的:即它必须满足问题的约束。

(2)局部最优:它是当前步骤中所有可行选择中最佳的局部选择。

(3)不可取消:即选择一旦做出,在算法的后面步骤就不可改变了。

补充:

(1)贪心算法的每一步都有一组选择,总是作出在当前来看是最好的选择。

(2)贪心算法并不从整体最优上来考虑,所作出的选择只是某种意义上的局部最优选择。

(3)贪心算法并不能保证最终结果是最优的。

 

2.请说明汽车加油问题的贪心选择性质(2分)

#include<iostream>

using namespace std;

/*/题目:

一辆汽车加满油后可行驶 n公里。旅途中有若干个加油站。

设计一个有效算法,指出应 在哪些加油站停靠加油,使沿途加油次数最少。

7 7

1 2 3 4 5 1 6 6

4

/*/

int main()

{

    int i,j,a[1005];//i代表可行使i公里

    cin >> i >> j;

    for(int t=0;t<=j;t++) //输入j+1个数

    {

        cin >> a[t];

    }

    a[j+1]=0;

    int sum =0,count=0,flag=0;

    for(int t =0; t<=j;t++)

    {

        sum=sum+a[t];//若剩余油量可以到达下一个目的地,则不加油。

        if(i-sum<=a[t+1]&&i>=a[t])//若到剩余油量不够到达下一个加油站则加油 。

        {

            sum=0;

            count++;

        }

        if(i<a[t])//若其中有一个目的地的距离超过最大行使距离,做标记。

        flag=1;

    }

    if(flag==0)

    cout << count<<endl;

    if(flag==1)

    cout <<"No Solution!"<<endl;

    return 0;

}

3.请说明在本章学习过程中遇到的问题及结对编程的情况(1分)

(1)问题:第一次把题目做出来的时候总是段错误,后面把思路调整了一下,就避免了这一个错误了。

(2)结对编程情况:和伙伴交流做题的思路可以让自己更理解问题,交流的过程中也会慢慢注意到自己之前忽略的问题。

 

posted @ 2018-12-01 10:54  icyk  阅读(167)  评论(0编辑  收藏  举报