1.你对贪心算法的理解
贪心算法指通过一系列的选择来得到问题的解,它所做的每一个选择都是当前状态下的局部最好选择,即(局部最优解 > 全局最优解)。一般来说,凡是经过数学归纳法证明可以采用贪心法的情况都应该采用,因为其具有高效性。同时,如果一个问题具有贪心选择性质和最优子结构性质,那么使用贪心法来对其求解总能求得最优解。
2.请说明汽车加油问题的贪心选择性质
“最远加油站优先”,即确保每次加油后汽车行驶的距离最长。
#代码
int greedy(vector<int>x, int n){ int sum = 0,k=x.size(); for(int j=0;j<k;j++) if(x[j]>n){ cout<<"No Solution!"<<endl; return -1; } for(int i=0,s=0;i<k;i++){ s+=x[i]; if(s>n){sum++;s=x[j];} } return sum; }
3.请说明在本章学习过程中遇到的问题及结对编程的情况
因为这道题相对来说比较基础,因此我和同伴结对时很快便确定了算法。因为做的比较快,第一次提交时忽略了输出“No Solution!”,这让我吸取了教训,不能因为题目不难就掉以轻心。