算法:01贪心算法

2.1、基本概念

2.1.1、贪心本质

  • 1、只根据当前已有的信息做出选择,一旦选择,就不会改变。

2.1.2、利用贪心算法求解问题的2个特性

  • 1、贪心选择性质
  • 2、最优子结构

2.1.3、贪心算法秘籍

  • 1、贪心策略:选择当前看上去最好的一个方案。
  • 2、局部最优解:一步步地得到局部最优解
  • 3、全局最优解:把所有的局部最优解合成为原来问题的一个最优解

2.2、最优装载问题

2.2.1、题目

2.2.2、分析&算法设计

2.2.3、代码

//program 2-1
#include <iostream>
#include <algorithm>
const int N = 1000005;
using namespace std;
double w[N]; // 古董的重量数组
int main()
{
    double c;
    int n;
    cout<<"请输入载重量c及古董个数n: "<<endl;
    cin>>c>>n;
    cout<<"请输入每个古董的重量,用空格分开:"<<endl;
    for(int i=0;i<n;i++)
    {
        cin>>w[i]; // 输入每个物品重量
    }
    sort(w,w+n);//按古董重量升序排序
    double tmp=0.0; // tmp为已装载到船上的古董重量
    int ans = 0; // ans为已装载的古董个数
    for(int i=0;i<n;i++)
    {
        tmp+=w[i];
        if(tmp<=c)
            ans++;
        else
            break;
    }
    cout<<"能装入的古董最大数量为Ans=";
    cout<<ans<<endl;
    return 0;
}

// 30 8
// 4 10 7 11 3 5 14 2
// 输出Ans=5

2.2.4、算法解析及优化拓展

2.3、背包问题

2.3.1、题目

2.3.2、分析&算法设计

2.3.3、代码

2.3.4、算法解析及优化拓展

posted @ 2020-12-24 23:46  im天行  阅读(102)  评论(0编辑  收藏  举报