问题描述: 在一条直线上有n堆石子,每堆有一定的数量,每次可以将两堆相邻的石子合并,合并后放在两堆的中间位置,合并的费用为两堆石子的总数。求把所有石子合并成一堆的最小花费。

输入格式:输入第一行包含一个整数n,表示石子的堆数。
  接下来一行,包含n个整数,按顺序给出每堆石子的大小 。

输出格式:输出一个整数,表示合并的最小花费。

测试用例:5
1 2 3 4 5

输出34

分析:第一堆和第二堆合并需要花费的钱是1+2=3,第一堆和第二堆合并后的总的再和第三堆合并即花费3+3=6,花费的钱是要加上之前花费的即此时花费的总钱3+6=9,依次类推,123堆再与第四堆合并6+4=10,总钱3+6+10=19,1234堆再与第5堆合并需花费10+5=15,总钱3+6+10+15=34

每一步的状态都在改变,使用动态规划。

#include <iostream>
#include <cmath>
using namespace std;int main(){//m[i][j]第i堆到第j堆合并的最小花费 int m[100][100]={0};int n;cin>>n;//n堆int sum[n]={0};//前缀和 int stone[100];//每堆个数 for(int i=1;i<=n;i++)
{cin>>stone[i];sum[i]=sum[i-1]+stone[i];}//相邻的话用循环,不相邻的话就是哈夫曼树 //m[i][j]第i堆到第j堆合并的最小花费 for(int len=1;len<=n;len++)//不是让i和j都遍历一遍 {//len是移动的长度 用来控制右边界  i+len-1是右边界 for(int i=1;i+len-1<=n;i++)//到第j堆 分成i到k堆( m[i][k])k+1堆到j堆(m[k+1][j])这两大堆 {//这两大堆再合成一堆寻找最优的k值 总的花费等于 m[i][k]+m[k+1][j]+sum[i][j] //i<=k<j int j=i+len-1;//右边界 if(len==1){m[i][j]=0;//自身到自身已经是一堆了不需要合并 }else {for(int k=i;k<j;k++){int temp=m[i][k]+m[k+1][j]+(sum[j]-sum[i-1]);//cout<<temp<<endl;if(temp<m[i][j]||m[i][j]==0)m[i][j]=temp;//cout<<m[i][j];}} }}cout<<m[1][n];return 0;
}

合并石子(动态规划)相关推荐

  1. 石子合并(动态规划DP)

    时限: 1000ms 内存限制:10000K  总时限:3000ms 描述: 在一个圆形操场的四周摆放着n堆石子(n<= 100),现要将石子有次序地合并成一堆.规定每次只能选取相邻的两堆合并成 ...

  2. 蒟蒻吃药计划-治疗系列 #round 2 合并石子+乘积最大

    1.合并石子 <信息学奥赛一本通>第五版 P371 第三节 T1 我就直接开始讲吧: Warning:这个题目和 合并果子 不一样!不一样!不一样!不一样!不一样!不一样!不一样!不一样! ...

  3. 合并石子 四边形不等式优化

    题目描述 有一排石子,共n 堆.现要将石子有次序地合并成一堆.规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分.试设计一个算法,计算出将n堆石子合并成一堆的最小得分. ...

  4. Luogu 1880 合并石子

    Luogu 1880 合并石子 (线性动态规划) 经典的区间型动态规划. ---------------------------------- 题干:https://www.luogu.org/pro ...

  5. 蓝桥杯-合并石子(java)

    算法提高 合并石子 时间限制:2.0s 内存限制:256.0MB问题描述在一条直线上有n堆石子,每堆有一定的数量,每次可以将两堆相邻的石子合并,合并后放在两堆的中间位置,合并的费用为两堆石子的总数.求 ...

  6. 合并石子 区间dp水题

    合并石子 链接: nyoj 737 描述: 有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N- ...

  7. 合并石子(三种方法)

    合并石子 题目 在一个操场上一排地摆放着N堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分.请设计一个程序,计算出将N堆石子合并成 ...

  8. 有n堆石子,每次取出两堆合成一堆,每堆石子的个数即为合并石子所需要耗费的体力,求出合并所有石子堆所需要耗费的最小体力

    有n堆石子,每次取出两堆合成一堆,每堆石子的个数即为合并石子所需要耗费的体力,求出合并所有石子堆所需要耗费的最小体力 典型的贪心题,即每次取出数量最少的两堆石子合并. 举个例子来说,假如有5堆石子,石 ...

  9. 洛谷 P1775 合并石子(弱化版)

    文章目录 合并石子(弱化版) 一.题目描述 二.思路 三.代码 合并石子(弱化版) 一.题目描述 https://www.luogu.com.cn/problem/P1775 设有 N(N \le 3 ...

  10. 2021.06.03合并石子+能量项链

    2021.06.03合并石子+能量项链 题目描述 在一个圆形操场的四周摆放 N 堆石子,现要将石子有次序地合并成一堆,规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. ...

最新文章

  1. 网站推广专员浅析如何做好网站推广与运营?
  2. wine清除软件残余图标
  3. 《深入理解C++11:C++ 11新特性解析与应用》——1.3 C++11特性的分类
  4. Qt QTcpSocket 对连接服务器中断的不同情况进行判定
  5. malloc()函数解析
  6. linux qt usb转串口通信,centos7 Qt USB转串口通信
  7. 设计php框架_PHP微型框架设计
  8. 失败全是无能,成功多是侥幸。
  9. Julia : |>的用法及多参数下的使用
  10. R语言【箱线图和茎叶图】
  11. 基于视角变化的视频关键帧提取方法(附代码地址)
  12. BZOJ 4079 [Wf2014] Pachinko
  13. 对接企业微信4:接收消息与事件
  14. MRO工业品采购如何降低成本?SCM供应链管理系统助力企业优化采购流程
  15. 根据两点经纬度计算两点距离...工具类
  16. Ajax保留浏览器历史的两种解决方案(HashPjax)
  17. 安卓模拟器安装教程_安卓终端模拟器-安卓命令行入门教程系列(新手的福利)
  18. web页面之搜索、高级搜索功能
  19. terminate called after throwing an instance
  20. 创业兵法——网络营销让你的产品家喻户晓

热门文章

  1. Android应用push到/system/app/后so库不能加载
  2. Exclusive or
  3. w ndows只能安装到gpt磁盘,安装win10系统时提示windows只能安装到GPT磁盘如何解决[多图]...
  4. 求10000里的阶乘C语言,最详细的注释,看不懂你来打我
  5. java语言中定义的字节输出流_Java语言中的输入输出流包括字节流、字符流、文件流、对象流以及线程之间通信的管道流,【 】包中的类...
  6. Oracle问题之ORA-12560TNS:协议适配器错误-转载
  7. 苹果三星小心了!传微软正开发智能手表
  8. 服务器显示发送时间为送达,邮件流正常传递,但是送达报告状态显示挂起
  9. 【行研报告】短视频创作者作品发布时间研究报告—附下载链接
  10. 洛谷P3469 [POI2008]BLO-Blockade(割点过程计算bcc)