本文索引目录:

一、贪心算法的基本思想以及个人理解

二、汽车加油问题的贪心选择性质

三、一道贪心算法题点拨升华贪心思想

四、结对编程情况

一、贪心算法的基本思想以及个人理解

  1.1  基本概念:

  首先我们从课本中仔细品读基本的贪心概念,顾名思义,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。

  因此对于贪心算法来说,这类算法没有固定的模板套路,当局部最优与全局最优解一致性被证明之后,即可使用贪心算法。

  1.2  使用条件:

  (1)需要具有贪心选择性质

  所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。

  动态规划算法通常以自底向上的方式解各子问题,而贪心算法则通常以自顶向下的方式进行,以迭代的方式作出相继的贪心选择,每作一次贪心选择就将所求问题简化为规模更小的子问题。

  对于一个具体问题,要确定它是否具有贪心选择性质,必须证明每一步所作的贪心选择最终导致问题的整体最优解。

  (2)需要具有最优子结构性质

  当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。问题的最优子结构性质是该问题可用动态规划算法或贪心算法求解的关键特征。

  1.3  使用思想:

  贪心算法是从问题的某一个初始值出发并且不断接近所给定的特定目标,以尽可能快的地求得更好的解。当达到算法中的某一步不能再继续前进时,算法停止。但是贪心算法无法保证最后的解是最佳的,并且不能求解最大或最小解问题,只能求解满足某些约束条件的可行解的范围。

  1.4  贪心算法的经典问题种类:

(1)背包问题

(2)活动时间安排的问题

(3)线段覆盖问题

(4)数字组合问题

(5)最大整数问题

(6)均分纸牌问题

(7)找零钱问题

二、汽车加油问题的贪心选择性质

  PTA7-1 汽车加油问题:寻找汽车满油量时可以行驶的最大路程的最后一个加油站,并且加油后重置当前油量的变量,并且用一个ans标记变量增加次数,并继续用此方法前进,特别需要注意的是需要检查每一小段路程是否超过汽车满油量时的最大支撑路程。

三、一道贪心算法题点拨升华贪心思想

  2.1  题目来源:

    HDU:http://acm.hdu.edu.cn/showproblem.php?pid=2088

  2.2  题目题干:

  Box of Bricks

·Problem Description:

  Little Bob likes playing with his box of bricks. He puts the bricks one upon another and builds stacks of different height. “Look, I've built a wall!”, he tells his older sister Alice. “Nah, you should make all stacks the same height. Then you would have a real wall.”, she retorts. After a little consideration, Bob sees that she is right. So he sets out to rearrange the bricks, one by one, such that all stacks are the same height afterwards. But since Bob is lazy he wants to do this with the minimum number of bricks moved. Can you help?

·Input

  The input consists of several data sets. Each set begins with a line containing the number n of stacks Bob has built. The next line contains n numbers, the heights hi of the n stacks. You may assume 1≤n≤50 and 1≤hi≤100.
  The total number of bricks will be divisible by the number of stacks. Thus, it is always possible to rearrange the bricks such that all stacks have the same height.
  The input is terminated by a set starting with n = 0. This set should not be processed.
 
·Output
  For each set, print the minimum number of bricks that have to be moved in order to make all the stacks the same height.
  Output a blank line between each set.
 
·Sample Input
  6
  5 2 4 1 7 5
  0
 
·Sample Output
  5

  2.3  题目大意:

    题目意思是:给定一堆积木,并且分成k列,试问如何用最少的移动操作(只能移动到相邻位置),能够将k列堆积木达到平均高度。

  2.4  题目思路:

    本题的贪心性质选择为:计算出总共的砖块数,在求出N堆砖的平均高度(即需要达到的最终高度),把高的堆上的砖移到不足平均高度的堆上。应该计算出所有不足高度的堆上总共差多少砖达到高度,即为结果。

 

  2.5  题目AC代码:

#include<stdio.h>
#include<string.h> int main()
{
int N;
int a[];
int kase = ;
while(scanf("%d",&N) && N)
{
int sum = ;
for(int i = ; i < N; i++)
{
scanf("%d",&a[i]);
sum += a[i];
}
int ans = ;
for(int i = ; i < N; i++)
{
if(a[i] < sum/N)
ans += sum/N - a[i];
}
printf("Set #%d\n",kase++);
printf("The minimum number of moves is %d.\n\n",ans);
} return ;
}

四、 结对编程情况:

  经过前几次实践题合作之后,结对编程逐渐顺利,能够让双方都能不断进行思路碰撞,实现较为合适的算法,当和三木小哥哥想到一起完成了算法设计、完成代码书写、成功AC一题之后,会有较为愉悦的心情感,较为顺利的完成三道题,继续加油,暂无较大问题。

如有不合理的地方,请及时指正,我愿听取改正~

参考链接:https://oi-wiki.org/

『嗨威说』算法设计与分析 - 贪心算法思想小结(HDU 2088 Box of Bricks)的更多相关文章

  1. 『嗨威说』算法设计与分析 - 回溯法思想小结(USACO-cha1-sec1.5 Checker Challenge 八皇后升级版)

    本文索引目录: 一.回溯算法的基本思想以及个人理解 二.“子集和”问题的解空间结构和约束函数 三.一道经典回溯法题点拨升华回溯法思想 四.结对编程情况 一.回溯算法的基本思想以及个人理解: 1.1 基 ...

  2. 『嗨威说』算法设计与分析 - PTA 数字三角形 / 最大子段和 / 编辑距离问题(第三章上机实践报告)

    本文索引目录: 一.PTA实验报告题1 : 数字三角形 1.1 实践题目 1.2 问题描述 1.3 算法描述 1.4 算法时间及空间复杂度分析 二.PTA实验报告题2 : 最大子段和 2.1 实践题目 ...

  3. 『嗨威说』算法设计与分析 - 动态规划思想小结(HDU 4283 You Are the One)

    本文索引目录: 一.动态规划的基本思想 二.数字三角形.最大子段和(PTA)递归方程 三.一道区间动态规划题点拨升华动态规划思想 四.结对编程情况 一.动态规划的基本思想: 1.1 基本概念: 动态规 ...

  4. 『嗨威说』算法设计与分析 - PTA 程序存储问题 / 删数问题 / 最优合并问题(第四章上机实践报告)

    本文索引目录: 一.PTA实验报告题1 : 程序存储问题 1.1 实践题目 1.2 问题描述 1.3 算法描述 1.4 算法时间及空间复杂度分析 二.PTA实验报告题2 : 删数问题 2.1 实践题目 ...

  5. 『嗨威说』算法设计与分析 - STL中Sort函数的实现原理初探

    本文索引目录: 一.对Sort算法实现的个人阅读体会 二.Sort算法使用的三个排序算法的优点介绍 2.1 插入排序的优缺点 2.2 堆排序的优缺点 2.3 快速排序的优缺点 2.4 新的结合排序—— ...

  6. 『嗨威说』常见的C++函数模板整理(一)

    开学两天,身上的职责直接变为两个班班长,三个小组组长,哇这事情估计够我忙活了,想躲都躲不掉啊,看来我还是真招人推荐各种管理职务啊,以后要是有人推荐我当经理啊领导啊该多好哈哈哈哈.记得今天奶奶生日,很开 ...

  7. 【技术文档】《算法设计与分析导论》R.C.T.Lee等·第7章 动态规划

    由于种种原因(看这一章间隔的时间太长,弄不清动态规划.分治.递归是什么关系),导致这章内容看了三遍才基本看懂动态规划是什么.动态规划适合解决可分阶段的组合优化问题,但它又不同于贪心算法,动态规划所解决 ...

  8. 算法设计与分析 - AC 题目 - 第 5 弹(重复第 2 弹)

    PTA-算法设计与分析-AC原题 - 最大子列和问题 (20分) 给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+, ..., Nj },其中 ≤i ...

  9. 算法设计与分析 - AC 题目 - 第 2 弹

    PTA-算法设计与分析-AC原题7-1 最大子列和问题 (20分)给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+1, ..., Nj },其中 1 ...

随机推荐

  1. django根据已有数据库表生成model类

    django根据已有数据库表生成model类 创建一个Django项目 django-admin startproject 'xxxx' 修改setting文件,在setting里面设置你要连接的数据 ...

  2. 如何成长为一名合格的web前端开发工程师呢?

    前端开发工程师不仅仅要掌握一些基础的美工设计等还要懂得网页设计类的HTML JavaScript和css,这三种能力缺一不可,虽不要求你特别的精通,但至少要熟练的掌握,能够运用自己所了解的这些技术和知 ...

  3. PHP each

    1.函数的作用:遍历数组元素 2.函数参数: @params array &$array 3.例子: <?php $arr = ['Boy','Girl']; while(list($k ...

  4. Mobius 反演与杜教筛

    积性函数 积性函数 指对于所有互质的整数 aaa 和 bbb 有性质 f(ab)=f(a)f(b)f(ab)=f(a)f(b)f(ab)=f(a)f(b) 的数论函数. 特别地,若所有的整数 aaa ...

  5. 冰释前嫌——转入Android Studio与连接手机无法识别问题

    前言:曾有段时间被AS+gradle虽紧密结合却依然搞不定联网依赖的模样弄的头疼,尝试了各种改代理.改配置均无果,于是坚守Eclipse进行开发学习,结果一方面受制于gradle Android项目的 ...

  6. WCF 入门调用实例教程

    WCF的相关概念信息就不在此赘述了,网上一搜一大把. 现在让我们动手搭建我们的第一个wcf程序吧,具体流程如下: 1. 新建立空白解决方案,并在解决方案中新建项目,项目类型为:WCF服务应用程序. 2 ...

  7. 12.Nginx代理与负载均衡

    1.什么是代理? 代为办理 --> 代理 2.Nginx正向代理.反向代理 正向代理: --> 上网 | 路由器替代 反向代理: --> 正向与反向代理的区别: 区别在于形式上服务的 ...

  8. Vue 的准备

    ## .es6的基本语法 ​ let---是局部作用于,不会存在变量提升,变量不能重复声明 ​ const--局部作用域,不会存在变量提升 不能重复声明,只声明常亮,不可变的量 ​ ```javasc ...

  9. LNMP与LAMP的工作原理

    LAMP的实现原理 LAMP=Linux+Apache+Mysql+PHP.​#工作原理:浏览器向服务器发送http请求,服务器 (Apache) 接受请求,由于php作为Apache的组件模块也会一 ...

  10. Core3.0的 安装与坑坑坑!!!

    Core3的 SDK下载地址是:https://dotnet.microsoft.com/download/dotnet-core/3.0  ! 不要下载preview8!!!,请先下载 previe ...