算法第四章作业

一、对贪心算法的理解

       概念:贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。
       性质:贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。
       体会:在解决不同的问题时常常需要寻找不同的贪心策略,有些问题看似正确的贪心策略其实是有许多隐藏很深的反例,所以在运用贪心算法之前需要进行一些简单的证明。
 
二、汽车加油问题
 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。

 

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

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

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

转载于:https://www.cnblogs.com/Benboys/p/10048726.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值