第一章:算法设计基础(思维体操+常见策略+高效算法+动态规划)

本文详细介绍了算法设计的基础,包括思维体操、问题求解策略和高效算法。通过多个实例,如分金币问题、墓地雕塑、蚂蚁问题、立方体成像等,展示了贪心算法、问题建模、优化枚举和动态规划的应用。强调了如何寻找问题突破口、利用已知信息、观察特殊性以及如何将实际问题数字化和建模。
摘要由CSDN通过智能技术生成

  第一章:算法设计基础

1.1思维的体操

例1、例2是说了下贪心问题。(AC)

例3:分金币(代数分析) (AC)

问题描述:

  一个圆桌旁围坐n个人,没人有一定数量的金币,问怎样给金币,可以使得每个人手中金币数量相等,且被转手的金币总数量最小。

解题思路:

  设置了一些变量,最终将问题改变成了求解:给定数轴上n个点,找出一个到它们的距离之和尽量小的点。

  这类问题的最优解即取这些数的“中位数”。

例4:墓地雕塑(寻找突破口,特殊性)

问题描述:

  需要将m个新雕塑加入到n个原有雕塑中,仍使得n+m个雕塑均匀分布,求移动的总距离的最小值。

解题思路:

  发现一个共同特点,原有的n个雕塑中肯定有一个不需要移动,那么在给定雕塑数量后,每个雕塑的位置就可以确定下来了!

  收获:寻找突破口,发掘条件,由已知信息去引出一些必要的结论来帮助结题!

例5:蚂蚁(观察问题的特殊性,找其特殊点)

问题描述:

  一根木棍上有n只蚂蚁,输出t秒后每只蚂蚁的状态位置。

要点:

  (1)两蚂蚁“碰撞” == “对穿而过”;

  (2)蚂蚁之间碰撞之后的相对位置是不变的!----这个特点是题目要求中按照原先顺序输出状态的关键!

例6:立方体成像:

 

 

1.2问题求解、常见策略:----这里主要强调了一种将实际问题建模的重要性!定义适当的数据结构,且将实际问题数字化!

例7:偶数矩阵(优化枚举)

问题描述:

  给定01矩阵,改变尽量少的0为1,使得该矩阵每个元素的上下左右4个元素之和为偶数。输出改变元素的最小个数。

解题要点:

  (1)全部枚举,枚举量过大;则采用枚举部分+计算其余部分的方式;

  (2)此方法实现的前提:需要枚举量之间存在约束条件(题目要求,本题的是使得每个元素的上下左右4个元素之和为偶数),可以被我们使用,来计算其余量。

例8:彩色立方体(建模,为正方体每面编号,枚举列出每种反转情况+将问题数字化)

 

例9:中国麻将(建模,将问题数字化+枚举+递归判断是否“听牌”)

 

例10:正整数序列(寻找问题的特殊性质,细心+耐心)(AC)

问题描述:

  给定整数n,使用最少的操作次数把序列1、2....n中所有的数字变成0,每次操作可以选择多个整数,同时减去一个相同大小的正整数。

解决:

  f(n)=f(n/2)+1;  数据不强,直接递归求解即可。(下面是递归函数代码,数据量大的情况下改为递推即可。)

int f(int n){
   return n==1 ? 1:f(n/2)+1;
}

 

例11:新汉诺塔问题:

 

例12:组装电脑:

问题描述:

  你有b元钱,需要组装一台电脑。给出n个配件的各自种类、品质和价格,要求每种类型的配件各买一个,总价格不超过b,且“品质最差配件”的品质因子应尽量大。

解决:

  要求品质因子,题目中描述说明品质因子最大为 1e9,这里采用2分的方法寻找结果。

  总的来说本题是采用的: 预处理+二分枚举+贪心。

 

例13:派

 

例14:填充正方形(AC)

问题描述:

  向矩阵中填充大写字母。

解决:

  贪心实例。(因为26个字母在本题中肯定使用不完,顾不存在回溯的情况,一遍贪心即可。)

 <

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值