算法第四章作业

1.你对贪心算法的理解

答: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。

  贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。但贪心算法不是对所有问题都能得到整体最优解,要进行证明该贪心策略能满足条件,且对后面的不受影响。
  贪心算法的基本思路:
    1.把求解的问题分成若干个子问题。
       2.对每一子问题求解,得到子问题的局部最优解。
       3.把子问题的解局部最优解合成原来解问题的一个解。
 
2.请选择一道作业题目说明你的算法满足贪心选择性质
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函数,总而言之,还是题做得太少了,不过贪心算法相比前两章学的还说要好理解一点。

  结对编程挺好的,感觉彼此都有在进步,我自己也能打出完整代码了,每次老师提问都是选择我来回答,我真害怕自己理解错误,或者是表述错误,影响进度,不过在同伴和老师的双重影响下,我对上机要回答的那些题影响会更深一点,几乎整段代码都理解背下来了,这可要好好感谢我的同伴还有老师。

posted @ 2020-11-10 12:04  林冬璇  阅读(159)  评论(0编辑  收藏  举报