蓝桥杯-算法提高-合并石子-DP

这篇博客主要介绍了蓝桥杯算法竞赛中关于合并石子问题的解决策略,通过动态规划(DP)方法寻找将所有石子合并成一堆的最小花费。博主给出了输入输出格式、数据规模约束以及解题思路,并提供了状态转移方程和AC代码作为参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

蓝桥杯-算法提高-合并石子-DP

  • 问题描述
      在一条直线上有n堆石子,每堆有一定的数量,每次可以将两堆相邻的石子合并,合并后放在两堆的中间位置,合并的费用为两堆石子的总数。求把所有石子合并成一堆的最小花费。
  • 输入格式
      输入第一行包含一个整数n,表示石子的堆数。
      接下来一行,包含n个整数,按顺序给出每堆石子的大小 。
  • 输出格式
      输出一个整数,表示合并的最小花费。
  • 样例输入
    5
    1 2 3 4 5
  • 样例输出
    33
  • 数据规模和约定
      1<=n<=1000, 每堆石子至少1颗,最多10000颗。
  • 解题思路:
    参考算法提高——合并石子!!!
    dp[i][j]:第i堆石子到第j堆石子合并的时间;
    逆向考虑,把一堆石头分为两堆,设置一个中间点k ,d[ i ][ j ] = d[ i ][ k ] + d[k + 1][ j ]),遍历每一个处于[ i , j ]中的每一个中间点k;
    合并的时候,第i堆到第j堆之间的间距len,len的取值范围为[1,n];
    所以i和j的关系为:
int j=i+len-1;

状态转移方程:

dp[i][j]=min(dp[i][k]+dp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值