2.1、基本概念
2.1.1、贪心本质
- 1、只根据当前已有的信息做出选择,一旦选择,就不会改变。
2.1.2、利用贪心算法求解问题的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、算法解析及优化拓展