算法第4章作业
一.对贪心算法的理解
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。
贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。
二. 加油问题代码:
#include <iostream> using namespace std; int main(){ int n,k; cin>>n>>k; int sum=0; int count=0; int a[k+1]; for(int i= 0;i<k+1;i++ ){ cin>>a[i]; } for(int i= 0;i<k+1;i++ ){ if(a[i]>n){ cout<<"No Solution!"<<endl; return 0;} if(sum+a[i]<n){ sum+=a[i]; } else { count++; sum=a[i]; } } cout<<count<<endl; }
贪心算法思想:首先判断每两地之前的距离是否大于车辆加满油后可行驶最大距离,若大于,则无法行驶到加油站,输出no solution。若小于,则将将该距离存入sum,并继续行驶,若下一次sum的值大于行驶最大距离,则count++,并将下一个两地间距离赋值给sum。循环到最后,count的值则是最小加油次数。
三.学习遇到的问题及结对情况
在编程中,经常出现对细节的考虑,导致变量的出错。最后我认为应该将代码先在纸上写出,按照伪代码在脑海中运行一遍,在写在电脑中,这样思维也流畅许多,效率也提高了。结对时,能及时发现对方的问题及时提醒,极大的缩小了debug的时间和精力,编程也更加事倍功半。