算法第4章作业

算法第4章作业


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

贪心算法通过一系列的选择来得到问题的解。他所做的每一个选择都是当前状态下的局部最好选择。贪心算法就是所求问题可以通过一系列局部最优的选择,达到所求问题最优解的目的。

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

汽车加油问题首先考虑的情况:

汽车原本加满的油可行驶的距离n每次都大于要直接到达的距离,此时输出0。这种情况可直接归咎到②中。

汽车加满油后可行驶的距离n大于要直接到达的距离,此时要考虑加油次数最少,那就一直行驶,每当到达下一个加油站,就判断剩余的油还够不够行驶到下一个加油站。贪心算法由此体现出来。

汽车加满油后可行驶的距离n只要有一次小于要到达的距离,则此时输出“No Solution!”。

以下是贪心算法的实现过程:

   for(int i=0;i<=k;i++){

      s+=a[i];

      if(a[i]>n){

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

       return 0;

      }

      if(s>n){

      count++;

      s=a[i];

      }

   }

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

本次遇到的问题主要是加油问题中“No Solution!”的判断一直出错,我把if(a[i]>n){cout<<"No Solution!"<<endl;}放到了循环体的外面,自己看的时候一直觉得是对的,找不出什么问题,最后我去问了小伙伴,他告诉我,要先判断能不能继续走。我才恍然大悟,原来我之前只考虑到了判断第一次能不能走完。总归还是自己太粗心!

错误的情况如下:

 

 

 

posted @ 2018-12-02 17:35  zmkkkk  阅读(124)  评论(0编辑  收藏  举报