算法第四章作业

1.对贪心算法的理解

贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。

贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。

2.汽车加油问题

一辆汽车加满油后可行驶 n公里。旅途中有若干个加油站。设计一个有效算法,指出应 在哪些加油站停靠加油,使沿途加油次数最少。

输入格式:

第一行有 2 个正整数n和 k(k<=1000 ),表示汽车加满油后可行驶n公里,且旅途中有 k个加油站。 第二行有 k+1 个整数,表示第 k 个加油站与第k-1 个加油站之间的距离。 第 0 个加油站表示出发地,汽车已加满油。 第 k+1 个加油站表示目的地。

输出格式:

输出最少加油次数。如果无法到达目的地,则输出“No Solution!”。

输入样例:

7 7
1 2 3 4 5 1 6 6 

输出样例:

4

对于这个问题,由于每一个加油站都为直接将油箱加满,而不是只能加一定数量的油,所以我们在走到以当前油量能走到的最远的加油站再加油一定是加油次数最少的,所以每一次都贪心地选取能走到的最远的加油站再把油加满即可。

3.代码
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<vector>
#include<queue>
#include<stack>
#include<algorithm>
#include<math.h>
using namespace std;
typedef long long ll;

int n, k, dis, Count, temp;

int main(){
    scanf("%d %d",&n, &k);
    temp = n;
    for(int i = 1; i <= k + 1; ++i){
        scanf("%d",&dis);
        if(dis > n){
            printf("No Solution!");
            return 0;
        }
        if(temp >= dis){
            temp -= dis;
        }
        else{
            temp = n;
            temp -= dis;
            ++Count;
        }
    }
    printf("%d",Count);
    return 0;
}

 

4.问题与结对编程
在图着色问题上走了一些弯路,后来发现了自己的错误。结对编程顺利。
posted @ 2019-11-27 08:46  显示名称已被使用.!  阅读(171)  评论(0编辑  收藏  举报