算法第四章作业

一、对贪心算法的理解

       概念:贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。
       性质:贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。
       体会:在解决不同的问题时常常需要寻找不同的贪心策略,有些问题看似正确的贪心策略其实是有许多隐藏很深的反例,所以在运用贪心算法之前需要进行一些简单的证明。
 
二、汽车加油问题
 1 #include <iostream>
 2 using namespace std;
 3 int a[1005];
 4 int main(){
 5     int n,k,cnt=0,i;
 6     cin>>k>>n;
 7     int oil = k;
 8     for(int i=0;i<=n;i++){
 9         cin>>a[i];
10     }
11     for(i=0;i<=n;i++){
12         if(oil>=a[i]){
13             oil -= a[i];
14         }
15         else{
16             if(a[i]<=k){
17                 oil = k-a[i];
18                 cnt++;
19             }
20             else break;
21         }
22     }
23     if(i==n+1) cout<<cnt<<endl;
24     else cout<<"No Solution!"<<endl;
25 }

       贪心思想:当汽车所剩的油量不可以行驶至下一加油站时,则输出“No Solution!”,故可以将贪心策略设为在每一个加油站加尽可能多的油(即加满),当汽车所剩油量不足以到达下一站时,则需加油,采用一个cnt变量记录加油的次数,当经过所有的加油站(i=n+1),即到达了目标地点,输出cnt。

 

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

       遇到的问题:遇到一些题目,很明显能断定是一道考察贪心算法思想的题目,但是不太清楚应该如何选择正确的贪心策略,以达到解决问题的目的,因为贪心的方式多种多样。

       结对编程情况:经常与队友一起探讨问题,交流互相的思路,在做完作业题之后与队友进行交流发现我们想的都是差不多的,运用了同样的方法。有时他能轻易发现我发现不了的错误,我也能发现他的错误。

posted @ 2018-12-01 11:13  晓风长路  阅读(200)  评论(0编辑  收藏  举报