1.贪心算法是ACM十分常用的手法,这是一种求最优解的策略。通过将求解一个整体最优解的问题分割求解一些局部最优解的问题。这种思想被用在接下来很多的算法中,比如最小生成树的普里姆算法其中就有贪心的思想。我们通过实际的例子来感受这种算法。

2.今年暑假不AC。拿到这个题目我们按照很常规的思想来思考:我们肯定是想要选取那些结束的早,持续的时间短的节目来观看,这样才能达到观看的节目最多。那么我们的思想其实就是一个贪心的思想,这里的贪心的体现就是:我们需要选区时间持续的短,并且结束的早的节目来观看。那么我们的算法可以这样实现:首先使用结构体来保存两个时间点,按照结束的时间进行排序,那么数组内的每一个结构体就是按照结束的时间进行排列,那么我们只需要比较每一个结构体开始的时间和下一个结构体开始的时间即可。具体的代码的实现如下:

#include<iostream>
#include<algorithm>
using namespace std;
struct time
{int st;int end;
}t[105];
bool cmp(time&t1, time&t2) { return t1.end < t2.end; }
int main()
{int n;while (cin >> n&&n){for (int i = 0; i < n; i++){cin >> t[i].st >> t[i].end;}sort(t, t + n,cmp);int num = 1;int tem = t[0].end;for (int i = 1; i < n; i++){if (t[i].st >= tem){num++;tem = t[i].end;}}cout << num << endl;}return 0;
}

3.写作业。看到这个题目,我们还是按照常规的思想:我们肯定是要去做哪些扣分多,时间紧急的题目。而且这个题目还有一些先决的条件,就是每一项作业都是一天完成的,也就是说所有的作业的权重是一样的,这样我们就不用考虑权重的问题。其实我们在上边的分析中就已经使用了贪心的思想:我们需要做哪些扣分多并且时间紧的作业,所以我们重排所有作业的标准又出来了,这个标准就是我们首先按照分数的多少进行排列,分数相同就按照时间排列。排列完成以后我们遍历整个数组,对于每一项作业我们来查找它的合适的位置,这样我们有需要一个数组来标记这一天是否被安排。通过以上的分析,我们给出实现的源代码:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct time
{int d;int s;
}t[1005];
bool Cmp(time&t1, time&t2)
{if (t1.s != t2.s)return t1.s > t2.s;else return t1.d < t2.d;
}
int use[1005];
int main()
{int T;int num;while (cin >> T){for (int i = 0; i < T; i++){cin >> num;for (int i = 0; i < num; i++){cin >> t[i].d;}for (int i = 0; i < num; i++){cin >> t[i].s;}sort(t, t + num, Cmp);int score = 0;memset(use, 0, sizeof(use));for (int i = 0; i < num; i++){int flag = 0;for (int j = t[i].d - 1; j >= 0; j--){if (!use[j]){use[j] = 1;flag = 1;break;}}if (!flag)score += t[i].s;}cout << score << endl;}}return 0;
}

以上就是贪心的两个典型的例子,贪心想要做的就是把求解一个整体最优转化为局部最优之和,但是我们都知道的是,整体最优不一定是局部最优之和。一个很简单的例子,对于一个F(x)=G(x)+T(x),求F的最大值,我们不能直接把G和T的最大值求出来加起来。这个时候就是整体最优不再简单的等于局部最优之和。所以贪心的使用是有一定的条件的。使用贪心的思想来设计程序的时候需要注意这些问题。

ACM_贪心(HDU2037HDU1789)相关推荐

  1. 《贪心算法》— NYOJ 贪心算法题目汇总(一)

    题目6 题目信息 运行结果 本题排行 讨论区 喷水装置(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为 ...

  2. 算法设计与分析第3章 贪心算法

    第4章 贪心算法 贪心算法总是作出在当前看来最好的选择.也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择. 贪心算法的基本要素 1.贪心选择性质 所谓贪心选择性质是指所 ...

  3. 贪心算法单源点最短路径例题c语言源代码,Dijkstra算法是解单源最短路径问题的一个贪心算法...

    问题描述 给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数. 另外,还给定 V 中的一个项点,称为源. 现在我们要计算从源到所有其他各项点的最短路径长度. 这里的长度是指路上各边权之 ...

  4. Too Many Segments CF595D 贪心乱搞

    传送门! 比赛的时候没有时间写了,看看了看大佬的代码,学习学习. 一开始实验室大佬说是用差分写的,但是看了代码发现打cf的人大家都是stl狂魔! 贪心思路:区间按照左端点排序,从1~2e5遍历每一个点 ...

  5. Roundgod and Milk Tea 贪心

    这个题好像可以用一种类似与置换的贪心方法来做~ sum记为剩余奶茶,一开始sum等于奶茶和 ans记录已经喝的奶茶数 不用排序,我们就从前往后直接处理,考虑的是每一个班最多可以喝多少杯奶茶 就是从剩余 ...

  6. 贪心算法简单实践 -- 分糖果、钱币找零、最多区间覆盖、哈夫曼编解码

    1. 贪心算法概览 贪心算法是一种算法思想.希望能够满足限制的情况下将期望值最大化.比如:Huffman编码,Dijkstra单源最短路径问题,Kruskal最小生成树 等问题都希望满足限制的情况下用 ...

  7. 贪心:expedition 最优加油方法

    已知一条公路上,有一个起点与一个终点,这之间有n个加油站;已知从这n个加 油站到终点的距离d与各个加油站可以加油的量l,起点位置至终点的距离L与起 始时刻油箱中汽油量P;假设使用1个单位的汽油即走1个 ...

  8. 贪心:Burst Balloons 最少次数完成射击气球

    已知在一个平面上有一定数量的气球,平面可以看作一个坐标系,在平面的x轴的不同位 置安排弓箭手向y轴方向射箭,弓箭可以向y轴走无穷远;给定气球的宽度 xstart ≤ x ≤ xend,问至少需要多少弓 ...

  9. 贪心:jump 游戏(获取最少跳跃的次数以及跳跃路径)

    一个数组存储了非负整型数据,数组中的第i个元素a[i],代表了可以从数组第i个 位置最多向前跳跃a[i]步;已知数组各元素的情况下,求是否可以从数组的第0个位置跳跃到数组的最后一个元素的位置,返回最少 ...

  10. 贪心:Jump Game 跳跃游戏

    一个数组存储了非负整型数据,数组中的第i个元素a[i],代表了可以从数组第i个 位置最多向前跳跃a[i]步;已知数组各元素的情况下,求是否可以从数组的第0个位置跳跃到数组的最后一个元素的位置,返回是t ...

最新文章

  1. Challenges(分组、聚合、连接)
  2. 括号字符串的有效性和最长有效长度
  3. 从C语言的角度重构数据结构系列(四)-静态链表动态链表
  4. java第六章工具包6.1P6-01.Collections 2020.4.3+7
  5. C#与C++ DLL的交互
  6. 如何清理电脑c盘_【电脑】第一期干货:如何正确清理C盘?
  7. java response cookie_JavaWeb部分 (Response Cookie)
  8. redhat下升级gcc编译器
  9. python中函数的返回值_python--函数的返回值、函数的参数
  10. 大数据分析对供应链有什么影响
  11. 【知识图谱系列】基于2D卷积的知识图谱嵌入
  12. xp谷歌浏览器时间快了_Win7系统零日漏洞曝光,谷歌建议:升级Windows 10
  13. 19-离线词典生成原理、图像描述子用BoW转化为BoW向量和FeatureVe
  14. 郝兵c语言_郝斌C语言自学教程(全套)
  15. BZOJ_3689_异或之_可持久化Trie+堆
  16. 向无所不能逼近的算法 逻辑与算法之一
  17. ospf-NBMA基本配置
  18. 小半斤拔凉 支付Java 相关参考
  19. IDL 初学教程(一)
  20. 简单总结下opacity、transparent以及rgba

热门文章

  1. 好消息!Android 模拟器可以运行 ARM 应用了
  2. ES6 模板字符串方法
  3. HTML5分级标题,HTML5与CSS3基础教程:创建分级标题_html/css_WEB-ITnose
  4. 计算机怎么设置桌面密码忘了,win7忘记开机密码怎么办?[多图]
  5. 赵小楼《天道》《遥远的救世主》解读(84)救主文化是什么?
  6. Sun jdk, Openjdk, Icedtea jdk关系
  7. linux btrfs raid0,Linux初学之btrfs文件系统及磁盘配额
  8. 箭头函数与this指向详解
  9. 点击百度网盘安装包无反应
  10. 2015—2016年QS世界大学排名200强-[转]