算法第四章作业
1.你对贪心算法的理解(2分)
(1)贪心算法总是做出当最优的选择,最后得到整体的最优解。
(2)一个问题可以分为多个局部,每个局部都有最优解, 若要用贪心算法求解某问题的整体最优解,必须首先证明贪心思想在该问题的应用结果就是最优解。
2.请说明汽车加油问题的贪心选择性质(2分)
2.贪心策略:
由于汽车是由始向终点方向开的,我们最大的麻烦就是不知道在哪个加油站加油可以使我们既可以到达终点又可以使我们加油次数最少。假设不到万不得已不加油,即除非我们油箱里的油不足以开到下一个加油站,才加油,在局部找到最优的解。每加一次油我们可以看作是起点,用相同的递归方法进行下去。将每个局部的最优解合并为原问题的解。
详细代码:
#include<cstdio> #include<iostream> #include<cstring> using namespace std; int main() { int i,j,a[1005]; cin >> i >> j; for(int t=0;t<=j;t++) { cin >> a[t]; } a[j+1]=0; int sum =0,coute=0,flag=0; for(int t =0; t<=j;t++) { sum=sum+a[t]; if(i-sum<=a[t+1]&&i>=a[t]) { sum=0; coute++; } if(i<a[t]) flag=1; } if(flag==0) cout << coute<<endl; if(flag==1) cout <<"No Solution!"<<endl; return 0; }
3.请说明在本章学习过程中遇到的问题及结对编程的情况(1分)
相对于前面所学的动态规划等问题,贪心算法比较好理解但应用起来还是有点不熟练。结队编程过程中我学到了很多知识,快到期末考试了要更加努力了鸭。