算法第4章小结

贪心算法

  基本要素:(1)最优子结构性质    (2)贪心选择性质

  贪心算法通过一系列选择来得到问题的解,所做的每个选择都是当前状态下局部最好选择,即贪心选择,但是这种策略并不总能奏效。

  在动态规划算法中,每步所做的选择往往依赖于相关子问题的解,因而只有在解出相关子问题后,才能做出选择;  而在贪心算法中,仅仅在当前状态下做出最好的选择,即局部最优解,再去解做这个选择后产生的相应子问题,不依赖于子问题。  故此,动态规划和贪心选择这两种,各有千秋,具体问题具体分析,恰得其所。

 

  【汽车加油问题】贪心选择性质:

      即续航量能跑的最大路段数,如果加完油后能跑完一定段数则继续跑下去,如果不行就要加油咯,具体代码及分析详见下文

 1 int main(){
 2     int km, station, i, run = 0, count = 0;
 3     cin >> km >> station;         
 4     /*km表示加完油所能跑的最大公里数, station表示加油站数*/ 
 5     int a[station + 1];
 6     for(int i = 0; i < station + 1; i++){
 7         cin >> a[i]; 
 8         /*a[i]来存储每段路程的公里数*/ 
 9     }
10     for(i = 0; i < station + 1; i++){
11         if(a[i] > km){
12             /*汽车耐力不够,到不了*/
13             cout << "No Solution!" << endl;
14             return 0;
15         }else{
16             run += a[i];        // run表示加完油后已将跑了所少公里 
17             if(run <= km){      //继续跑 
18                 continue;
19             }else{              //继续不了,就要加油咯 
20                 count++;
21                 i -= 1;
22                 run = 0;
23             }
24         }
25     }
26     cout << count << endl;

    Question: 一直想问为什么这个算法的名字叫做“贪心算法”。    结对编程情况嘞,拍照片中......先行告退了,咱图片见分晓,哈哈哈哈哈。

posted @ 2019-11-21 11:14  双眸失神为我撩人  阅读(100)  评论(0编辑  收藏  举报