1.你对贪心算法的理解
答: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。
贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。但贪心算法不是对所有问题都能得到整体最优解,要进行证明该贪心策略能满足条件,且对后面的不受影响。
贪心算法的基本思路:
1.把求解的问题分成若干个子问题。
2.请选择一道作业题目说明你的算法满足贪心选择性质
2.对每一子问题求解,得到子问题的局部最优解。
3.把子问题的解局部最优解合成原来解问题的一个解。
4-2 货币找零 (30分)
人民币的面值有100、50、20、10、5、2、1元。请你输出找零纸币数最少的方案
输入格式:
两个整数,分别表示付款金额和消费金额
输出格式:
输入找零方案。包含若干行,每行包含两个数字,纸币面额和纸币数量
输入样例:
10 3
输出样例:
在这里给出相应的输出。例如:
5 1
2 1
#include<iostream> #include<algorithm> using namespace std; int a[7] = {1,2,5,10,20,50,100}; int main() { int pay, money, i; cin >> pay >> money; int t = pay - money; for(i = 6; i >= 0; i--) { int c = t / a[i]; t = t % a[i]; if(c != 0) cout << a[i] << " " << c << endl; } return 0; }
像在这里,拿10块钱,付3块钱,找7块钱,这个时候,最开始找了1张5块钱,还剩2块钱,进行了就变成这个问题,要找2块钱的纸币使得数量最小,满足贪心选择性质,分成若干小问题,都是在局部上寻找最优解
3.请说明在本章学习过程中遇到的问题及结对编程的情况
答:最大的问题莫过于理解题意了,理解题意真的好难,要把它往贪心算法上思考也好难,好不容易理解了又会有点刻板,一看到题,立马搬上结构体和cmp函数,总而言之,还是题做得太少了,不过贪心算法相比前两章学的还说要好理解一点。
结对编程挺好的,感觉彼此都有在进步,我自己也能打出完整代码了,每次老师提问都是选择我来回答,我真害怕自己理解错误,或者是表述错误,影响进度,不过在同伴和老师的双重影响下,我对上机要回答的那些题影响会更深一点,几乎整段代码都理解背下来了,这可要好好感谢我的同伴还有老师。