编程语言
首页 > 编程语言> > 算法复习|贪心

算法复习|贪心

作者:互联网

贪心

在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。但是由于题目某种性质导致每次取局部最优,便会得到全局最优。

贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。

算法思路

  1. 建立数学模型来描述问题
  2. 把求解的问题分成若干个子问题
  3. 对每一子问题求解,得到子问题的局部最优解
  4. 把子问题的局部最优解合成原来问题的解

样例 国王游戏

描述

恰逢 H 国国庆,国王邀请 n n n 位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这 $n $位大臣排成一排,国王站在队伍的最前面。排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。

国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序, 使得获得奖赏最多的大臣,所获奖赏尽可能的少。注意,国王的位置始终在队伍的最前面。

解题思路

设 a i , b i a_i,b_i ai​,bi​分别为第 i i i 位大臣左右和右手的数字,按 a i × b i a_i\times b_i ai​×bi​ 由小到大排序


样例 活动选择问题

描述

设有 n ( n < = 1 0 6 ) n(n<=10^6) n(n<=106)个活动的集合$E ={1,2,…,n } $,其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动 i i i 都有一个要求使用该资源的起始时间 s i s_i si​ 和一个结束时间 f i f_i fi​ ,且 s i < f i s_i < f_i si​<fi​ 。现在给出 n n n 个活动使用资源的起始时间 s i s_i si​ 和结束时间 f i f_i fi​ ,请你帮助办公室人员安排活动,要求排的活动尽量多 。

解题思路

按结束时间由小到大排序,优先选取结束时间早的节目。

标签:右手,复习,问题,算法,大臣,最优,国王,贪心
来源: https://blog.csdn.net/pyx2466079565/article/details/115798895