石子合并

这是一篇关于解决石子合并问题的博客,通过动态规划的方法求解最小合并花费。给定石子堆的数量和每堆的石子数,每次只能合并相邻的两堆,目标是找出合并成一堆的最小总花费。博客介绍了动态规划的思路和解题公式,并给出了相应的代码实现。
摘要由CSDN通过智能技术生成

石子合并问题

有n堆石子排成一排,每堆石子有一定的数量,将n堆石子合并成一堆。合并的规则是每次只能合并相邻的两堆石子,合并的花费为这两堆石子的总数。石子经过n-1次合并后成为一堆,求总的最小花费。

输入:第一行为堆数,第二行为石子数

输出:总的最小花费

样例如下:
Input
3
2 4 5
output
17

这显然是一道动态规划的题目,那么我们应该运用动规以大化小的思想,找到问题,在这里我们需要的就是将石堆合并,并且计算最小花费,花费是两堆石子的总数,我们可以通过每几堆石堆的最小解,直到达到输入的石子堆数,将每种堆数的最小花费计算出来,公式如下:

	dp[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j] + sum[j] - sum[i-1]);

于是,我们可以从两堆,然后求三堆,四堆,直至n堆,从每种情况中找出单独的最优解,就可以向结果推进,直至结果出现
运用这种思想,我们可以得到如下代码

#include <stdio.h>
#include <stdlib.h>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值