算法第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的时间和精力,编程也更加事倍功半。

posted @ 2018-11-30 23:13  陳泽博Czmichael  阅读(139)  评论(0编辑  收藏  举报