算法第四章作业
1.你对贪心算法的理解
从初始解开始出发,每次选择都是选择最佳的,从而达到整体较好的效果,大部分情况下得到的解跟最优解相近,不过在某些情况下跟最优解相差较大。
2.请说明汽车加油问题的贪心选择性质
刚开始油是满的,然后出发时要比较车的剩余油量与去下一站的耗油量的大小,如果剩余量大则可以去下一站并减去耗油量,如果剩余量小则把剩余量重置为满油再进行比较。
代码
#include <iostream> using namespace std; void findAns(int a[],int n,int k){ int num = 0; int remain = n; for(int i = 0;i<=k;i++){ if(a[i]<=remain){ remain -= a[i]; }else{ i--; remain = n; num++; } } cout<<num; } int main(){ int n,k; cin>>n>>k; int a[1005]; for(int i = 0;i<=k;i++){ cin>>a[i]; if(a[i]>n){ cout<<"No Solution!"<<endl; return 0; } } findAns(a,n,k); return 0; }
3.请说明在本章学习过程中遇到的问题及结对编程的情况
删数问题困扰了我们好长时间,我们用构造法来求解的,我编程还是太少了,总是出现各种各样的小错误,浪费了大量的时间。还有我的输出是把每个数字存在数组中在输出的,我验证的例子都对了,例子的数据很大也没问题。但pta显示我答案错误(一脸懵逼)而队友的每求一位就输出一位的方法却可以(百思不得其解)。