石子合并问题期末报告

这篇博客探讨了石子合并问题,分析了如何将环形结构转换为直线处理,设计了动态规划算法求解最小和最大得分。博客提到了贪心算法的局限性,并详细介绍了动态规划的关键技术和测试情况。
摘要由CSDN通过智能技术生成

一、问题分析

1.1问题内容描述

在一个圆形操场的四周摆放着n堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。试设计一个算法,计算出将n堆石子合并成一堆的最小得分和最大得分。

1.2 问题的基本要求

对于任意给定的n堆石子,计算合并成一堆的最小得分和最大得分。

1.3分析

环形结构,经常采用双倍长度线性化手段,也就是说,把环形结构看成是长度为环的两倍的线性结构来处理,应用动态规划。

二、设计思路

2.1描述解决方案

以求解最小值为例

1. 我们为了将环形变为直线,必须规定转动顺序,这里采用逆时针转动,且以 i 作为起点,j作为终点。

2. 当规定好终点了,那么这环形有4种情况,我们求在这四种情况下最小的。

3. 关于转换成直线,比如存在 a(0) -> b(1) -> c(2) -> d(3) 与 d(3) -> a(4) -> b(5) -> c(6)。第一条是 i=0,j=3的数组,第二条是 i=3,j=6 的数组。 这样,我们就不用返回去计算了。

4. 四种情况分别是数组中的四行,每行最后一个代表遍历的结果,我们最后只需要遍历这四个值,找到最小值即可。

uploading.4e448015.gif正在上传…重新上传取消

 

2.2算法思想

以得分最大举例。

如果将环形转换为直线,其核心思想就是:通过将数量变为 2n来转换成直线问题。 比如:数组v(1,2,3,4),但是题目中的要求是1也可以和4连上,所以我们可以把数组v当成 (1,2,3,4,1,2,3,4)。这样子的话,我们就可以算出 (2,3,4,1)的,(3,4,1,2),(4,1,2,3)的了。

sum数组的含义: sum[i]就是从数组v[1]到数组v[i]的和

  • 问题及解决方案

3.1问题1

开始以为通过贪心算法可能很快解决问题&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值