1. 背包问题

#include "stdafx.h"
#include <stdio.h>
#include "malloc.h"
//最大单位重量价值先放背包原则float * GreedyKnapsack(int n, int W, int *Weights, float *Values, float *VW) {int i;//分配空间及初始化 float *x = (float *)malloc(sizeof(float)*n);for (i = 0; i<n; i++)x[i] = 0;for (i = 0; i<n; i++)if (Weights[i] <= W) {          //如果背包剩余容量可以装下该物品x[i] = 1;printf("背包%d 减去重量%d \n", W,Weights[i] );W = W - Weights[i];}elsebreak;if (i<n) {x[i] = W / (float)Weights[i];     //如果还有物品可以部分装入背包中}for (i = 0; i<n; i++)   //输出printf ("%f \n",x[i] );return x;
}int main(int argc, const char * argv[]) {int Weights[5] = { 30, 10, 20, 50, 40 };float Values[5] = { 65, 20, 30, 60, 40 };float VW[5] = { 2.1,2,1.5,1.2,1 };float x[5];GreedyKnapsack(5, 100,  Weights,  Values,  VW);while (1);return 0;
}

2.钱币找零

#include<iostream>
#include<algorithm>
#include "stdafx.h"
using namespace std;
const int N = 7;
int Count[N] = { 3,0,2,1,0,3,5 };//每一张纸币的数量
int Value[N] = { 1,2,5,10,20,50,100 };//每一张的面额
static int min(int a, int b)
{return a>=b ? b : a;}int solve(int money)
{printf("金额%d \n", money);int num = 0;for (int i = N - 1; i >= 0; i--)            //1.排序,从大到小{int c = min(money / Value[i], Count[i]);//2.约束条件每一个所需要的张数 money = money - c*Value[i]; num += c;                               //总张数 printf("剩余金额 %d 面值%d 张数%d\n", money,Value[i],c);}if (money>0) num = -1;return num;
}int main()
{int money = 325;int res = solve(money);while (1);
}

3.活动安排

#include "stdafx.h"
#include<stdio.h>
#define n 11
int s[n + 1] = { -1,1,3,0,5,3,5,6,8,8,2,12 };                                                 //活动按结束的时间递增排列
int f[n + 1] = { 0,4,5,6,7,8,9,10,11,12,13,14 };
//递归法
int RECURSIVE_ACTIVITY_SELECTOR(int *s,int *f,int i,int j)         //S[i][j]是所有与a[i],a[j]兼容的活动,f[i]是活动i的结束时间,i,n是下标,s[i]表示i活动开始的时间
{   int m = i+1 ;                               while (m <= n && s[m] < f[i])                                     //这里一开始i=1的话m=2 在比较s[2]和f[1]就会漏掉一个,所以把主函数里面i的位置都减掉一{m = m + 1;}if (m <= n){printf("递归a[%d]   ", m);int rt=RECURSIVE_ACTIVITY_SELECTOR(s, f, m, n);printf("----\n");return rt;}elsereturn 0;
}
//迭代
int GREEDY_ACTIVITY_SELECTOR(int *s, int *f)
{int i = 1,m;printf("贪心a[%d]", 1);           //前面有推论结束时间最早的一个一定是最大活动里面的一个选择,结束时间按递增排序,所以a1一定会被输出for (m = 2; m <= n; m++){if (s[m] >= f[i]){printf("a[%d]    ", m);i = m;                              //每次递归或者迭代都是在上一次调用的结束时间基础上选择下一次调用的开始时间}}return 0;
}int main()
{//递归法RECURSIVE_ACTIVITY_SELECTOR(s, f, 1-1, n);  printf("\n");//迭代GREEDY_ACTIVITY_SELECTOR(s, f);while(1);return 0;
}

常用算法案例之贪心法(C语言)相关推荐

  1. 计算机二级c常用算法,闽高校计算机二级C语言常用算法

    闽高校计算机二级C语言常用算法 (31页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 29.9 积分 常用算法1.求最大公约数与最小公倍数例1:求两个正数 ...

  2. 常用算法总结(穷举法、贪心算法、递归与分治算法、回溯算法、数值概率算法)

    博主联系方式: QQ:1540984562 微信:wxid_nz49532kbh9u22 QQ交流群:892023501 目录 1.穷举法 2.贪心算法 3.递归与分治算法 4.回溯算法 5.数值概率 ...

  3. 五大常用算法之三:贪心算法

    一.基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解. 贪心算法没有固定的算法框架,算法设计的关键 ...

  4. 五大常用算法之四:回溯法

    http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741376.html 1.概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试 ...

  5. 数学建模常用算法—优劣解距离法(TOPSIS)

    解决问题 建模比赛中最基础的模型之一,其主要用于解决评价类问题(例如:选择哪种方案最好.哪位运动员或者员工表现的更优秀),用于确定各个方案层的最终得分. 优点 TOPSIS 法是一种常用的综合评价方法 ...

  6. 回溯法采用的搜索策略_五大常用算法之四:回溯法

    1.概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就"回溯"返回,尝试别的路径.回溯法是一种选优搜索法,按选优条件向 ...

  7. 贪心算法适用条件_五大常用算法之三:贪心算法

    一.基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解. 贪心算法没有固定的算法框架,算法设计的关键 ...

  8. 常用算法回顾——穷举法

    文章目录 一.穷举法 定义 算法思路 算法优缺点 示例: 一.穷举法 定义 穷举法是算法设计中经常使用的一种方法,基本思想是问题的要求将问题的所有可能的输入一一进行验证,看是否满足问题的条件,从而找到 ...

  9. 数学建模常用算法—灰色关联分析法(GRA)

    解决问题 灰色关联分析的基本思想是根据序列曲线几何形状的相似程度来判断其联系是否紧密.曲线越接近,相应序列之间的关联度就越大,反之就越小. 一般的抽象系统,如社会系统.经济系统.农业系统.生态系统.教 ...

  10. (转)五大常用算法:分治、动态规划、贪心、回溯和分支界定

    分治算法 一.基本概念 在计算机科学中,分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题-- ...

最新文章

  1. 14、ListView案例
  2. STM32 GPIO与 EXTI的映射关系
  3. VTK:网格之SplitPolyData
  4. php 数据库 文件转移 1146 错误
  5. 03、MySQL—数据表操作
  6. 记录excel翻车现场
  7. apt-get与dpkg常用命令
  8. 【免费毕设】成绩查询系统(系统+论文+答辩PPT)
  9. Java Web的分页工具类
  10. JAVA 基础语法——开发环境以及J2SE代码实现
  11. 2020中兴捧月算法大赛——傅里叶赛道 第1名方案
  12. html中空格符号以及空格字符实体的总结
  13. 微信公众号中,怎么插入代码块?(微信公众号中,代码块怎么排版?)
  14. seo是什么,干什么用,有什么作用(二)
  15. LLVM学习日志2——PASS尝试
  16. 淘宝/天猫获得淘宝店铺详情 API接口及 返回值说明
  17. SWUSTOJ #617 班级课程成绩计算
  18. 用java下载html页面
  19. STM32 I/O口不能正常输出高低电平问题的解决方案
  20. Codeforces 1169E DP

热门文章

  1. 各大主流电子地图坐标拾取系统
  2. 禁用校园网烦人的客户端下载自动弹窗
  3. 我的世界Java版最大村庄_《我的世界》MC中最大的村庄种子,PC和PE都可以用
  4. c语言程序设计基础第三版答案,清华大学出版社-图书详情-《C语言程序设计上机指导与习题解答(第3版)》...
  5. javaagent技术专利申请
  6. 服务器Java环境配置
  7. visio 2013破解
  8. 《Axure RP 9实战指南》Axure RP 9.0最新版汉化问题
  9. 国内服务器 显示国外ip,国外ip访问国内服务器地址
  10. 英特尔显示器音频_联想YOGA C940英特尔移动超能笔记本评测:小身材也有大能量...