算法第四章作业

一、贪心算法的理解

 贪心算法又称之为贪婪算法,在考虑问题时,总是做出在当前状况来说最好的算则,而不从整理来考虑。从某种意义上说是局部最优解,贪心算法所得到的答案并不一定是整体最优解,所以在使用贪心算法一定要考虑清楚,是否能使用贪心算法。选择的贪心策略必须具有无后效性,即当前选择的结果必须不能对之前的结果状态产生影响,而只与当前状态有关。

贪心算法的主要思想:

 

  1. 建立数学模型来描述问题。
  2. 把求解问题分成若干个子问题。
  3. 对每一子问题求解,得到子问题的局部最优解。
  4. 把子问题的局部最优解合成原来解问题的一个解。

 

二、题目讲解

 

 

解题思路:

 

因为要使加油次数最少,所以要尽可能的不加油,即每次都尽量开到能到达的最远的加油站才加油。动态判断能不能到达下一个加油站,能就继续行驶到下一个加油站,不能就在此加油站加油。

 

AC代码:

 

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a[1005];
 4 int main(){
 5     int n,k,ans=0,len=0;
 6     bool flag=1;
 7     cin>>n>>k;
 8     for(int i=0;i<=k;i++){
 9         cin>>a[i];
10         len+=a[i];
11         if(a[i]>n) flag=0;
12     }
13     if(flag==0) {
14         cout<<"No Solution!\n";
15         return 0;
16     }
17     if(len<=n){
18         cout<<0<<'\n';
19         return 0;
20     }
21     int i=0,you=n;
22     while(i<=k){
23         you-=a[i];
24         if(you>=0) i++;
25         else{
26             you=n;
27             ans++;
28         }
29     }
30     cout<<ans<<'\n';
31     return 0;
32 }
View Code

 

 

三、心得体会

贪心算法的关键在于找出贪心策略,只要找到了贪心策略就能够轻松解决题目,但如果找不到正确的策略就很难解决了。

这一章总体来说还是比较简单的,结对编程的过程也比较顺利,在实验课中顺利的写出三题,彼此互相帮助互相促进,加强了对贪心算法的理解和熟练。

 

 

posted on 2019-11-27 22:16  maskkkk  阅读(115)  评论(0编辑  收藏  举报

导航