算法第四章作业

1.对贪心算法的理解

  贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。贪心算法一般具有两个性质:贪心选择性质和最优子结构性质。

2.请选择一道作业题目说明算法满足贪心选择性质

 

 

 

 

 分析:根据长度进行非降序排序,接着遍历,判断每一段是否小于length,小于则 j++,length -= a[j];

我的代码是:

#include<iostream>
#include<algorithm>
using namespace std;

int main()
{
    int n, length;
    cin >> n >> length;
    int a[100000];
    for(int i = 0; i < n; i++)
        cin >> a[i];
    sort(a, a + n);
    
    int j = 0;
    while(length > 0) 
    {
        length -= a[j];
        j++;
        if(length < 0)
            j--;
    }
    cout << j;
    return 0;
} 

 

3.在本章学习过程中遇到的问题及结对编程的情况:

  这次结对编程我们依旧是先各自思考编程,再互相交流,艳艳先做出来了,而我还在调bug,然后发现我们俩的思路不太一样,她的是累加比较,我的是递减比较,最后调式完也都完全正确了,但从代码的可读性、简洁美观来看,还是艳艳的代码好一些。

 

posted @ 2020-11-15 10:42  杨璇  阅读(87)  评论(0编辑  收藏  举报