算法第四章作业
一:对贪心算法的理解
特点:
1.贪心算法的每一步都有一组选择,贪心算法总是做出在当前看来是最好的选择
2.贪心算法并不代表着整体最优,所作的选择只是某种意义的局部最优
3.贪心算法希望通过做出局部最优选择达到全局最优。但贪心算法并不能保证最终结果为最优
所需要的条件:
贪心选择性质
最优子结构性质
二:汽车加油问题
思想:不到迫不得已不加油(贪心选择策略
#include<iostream>
#include <stdio.h>
using namespace std;
void greedy(int d[],int n,int k) {//贪心算法
int num = 0;
for(int i = 0;i <= k;i++) {
if(d[i] > n) { //若有路程大于汽车加满油所能行走的路程
cout<<"No Solution!";
return;
}
}
for(int i = 0,s = 0;i <= k;i++) {
s += d[i];
if(s > n) {
num++; //需要加油了
s = d[i];
}
}
cout<<num<<endl;
}
int main() {
int i,n,k;
int d[1000];
cin>>n>>k;
for(i = 0;i <= k;i++)
cin>>d[i];
greedy(d,n,k);
}
3.本章学习过程中,比前两章的学习略为顺利一点,线下讨论时也没什么大问题。但在上机时,第二道题困扰了我和我队友很久,最后在大家一起思考反复验证下,最终成功!感谢队友!