说明:本文引用leetcode :455,452,122,605题。
介绍:
贪心算法(Greedy Algorithm)是一种解决问题的算法策略,它在每一步都会选择当前情况下看起来最优的选择,而不考虑未来可能发生的情况。贪心算法通常在问题具备“贪心选择性质”时使用,即选择当前最优解似乎能够导致全局最优解。虽然贪心算法不一定对所有问题都有效,但它在一些特定类型的问题上表现出色,因为它具有高效性和相对简单的实现。以下是贪心算法的一般步骤:
-
问题建模: 将问题抽象成一个数学模型,明确定义问题的目标和约束条件。
-
制定选择策略: 在每一步中,根据某个标准选择当前看起来最优的解决方案。这个选择策略是贪心算法的核心,通常涉及权衡局部最优和全局最优的考虑。
-
检验可行性: 确保所选的解决方案满足问题的约束条件,如果不满足,需要舍弃该解决方案。
-
更新问题状态: 根据所选的解决方案,更新问题的状态,准备进行下一步的选择。
-
重复步骤2到步骤4: 迭代执行,直到达到问题的终止条件。贪心算法在许多领域都有应用,例如:
-
最小生成树问题:在图论中,Prim算法和Kruskal算法是两个经典的贪心算法,用于找到一个图的最小生成树。
-
背包问题:在组合优化中,有多种变体的背包问题,可以使用贪心算法来找到接近最优解的解决方案。
-
调度问题:在任务调度和作业调度中,贪心算法可以用来选择最优的任务或作业顺序。
-
霍夫曼编码:在信息编码中,霍夫曼编码是一种基于字符频率的贪心算法,用于实现数据的无损压缩。
需要注意的是,贪心算法并不总是能够找到全局最优解,因为它只关注当前的最优选择,而不考虑长远影响。因此,在应用贪心算法时,需要仔细分析问题的性质,以确保贪心策略适用于特定问题。
1.经典问题。
#include
#include
#include
using namespace std;
/*
假设1元、2元、5元、10元、20元、50元、
100元的纸币分别有a,b,c,d,e,f,g张。
现在要用这些钱来支付m元,至少要用多少张纸币?
用贪心算法的思想,每一次选择最大面值的钱币
*/
int main()
{
int sum = 0;
cout << "please input your money" << endl;
int A;
int temp[6];
int moneyval[6] = {1, 5, 10, 20, 50, 100}; //每种硬币的面值
cin >> A;
for (int i = 5; i >= 0; i--)
{
temp[i] = (A / moneyval[i]);
A -= (temp[i] * moneyval[i]);
sum += temp[i];
}
cout << sum << endl;
system("pause");
return 0;
}
// int main()
// {
// while (j = 3)
// {
// int i;
// int temp;
// cout << "input your money:" << endl;
// cin >> A;
// cout << "nums of every coin:" << endl;
// for (int i = 5; i >= 0; i--)
// { //贪心策略,有限选择面值大的票子
// cout << "----" << A << "与" << moneyval[i] << "进行比较"
// << "----" << endl;
// temp = A / moneyval[i]; //使用temp 记录使用票子i 的枚数 比如45,就需要找两张20 temp 就是需要找的钱的个数。
// A -= (temp * moneyval[i]);
// if (temp != 0) //判断是否找零成功
// {
// sum += temp;
// }
// cout << "least give" << temp << "piece" << moneyval[i] << ""
// << "left:" << A << endl;
// }
// cout << "total num:" << sum << endl; //最少票子总数
// sum = 0;
// cout << "exit(yes1?no:0):" << endl;
// cin >> j;
// if (j == 1)
// break;
// if (j == 0)
// continue;
// else
// {
// cout << "illeagual operation:" << endl;
// break;
// }
// }
// system("pause");
// return 0;
// }
//贪心算法汇总
#include
#include
#include
#include
#include