合并石子(动态规划)
问题描述: 在一条直线上有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;
}
合并石子(动态规划)相关推荐
- 石子合并(动态规划DP)
时限: 1000ms 内存限制:10000K 总时限:3000ms 描述: 在一个圆形操场的四周摆放着n堆石子(n<= 100),现要将石子有次序地合并成一堆.规定每次只能选取相邻的两堆合并成 ...
- 蒟蒻吃药计划-治疗系列 #round 2 合并石子+乘积最大
1.合并石子 <信息学奥赛一本通>第五版 P371 第三节 T1 我就直接开始讲吧: Warning:这个题目和 合并果子 不一样!不一样!不一样!不一样!不一样!不一样!不一样!不一样! ...
- 合并石子 四边形不等式优化
题目描述 有一排石子,共n 堆.现要将石子有次序地合并成一堆.规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分.试设计一个算法,计算出将n堆石子合并成一堆的最小得分. ...
- Luogu 1880 合并石子
Luogu 1880 合并石子 (线性动态规划) 经典的区间型动态规划. ---------------------------------- 题干:https://www.luogu.org/pro ...
- 蓝桥杯-合并石子(java)
算法提高 合并石子 时间限制:2.0s 内存限制:256.0MB问题描述在一条直线上有n堆石子,每堆有一定的数量,每次可以将两堆相邻的石子合并,合并后放在两堆的中间位置,合并的费用为两堆石子的总数.求 ...
- 合并石子 区间dp水题
合并石子 链接: nyoj 737 描述: 有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N- ...
- 合并石子(三种方法)
合并石子 题目 在一个操场上一排地摆放着N堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分.请设计一个程序,计算出将N堆石子合并成 ...
- 有n堆石子,每次取出两堆合成一堆,每堆石子的个数即为合并石子所需要耗费的体力,求出合并所有石子堆所需要耗费的最小体力
有n堆石子,每次取出两堆合成一堆,每堆石子的个数即为合并石子所需要耗费的体力,求出合并所有石子堆所需要耗费的最小体力 典型的贪心题,即每次取出数量最少的两堆石子合并. 举个例子来说,假如有5堆石子,石 ...
- 洛谷 P1775 合并石子(弱化版)
文章目录 合并石子(弱化版) 一.题目描述 二.思路 三.代码 合并石子(弱化版) 一.题目描述 https://www.luogu.com.cn/problem/P1775 设有 N(N \le 3 ...
- 2021.06.03合并石子+能量项链
2021.06.03合并石子+能量项链 题目描述 在一个圆形操场的四周摆放 N 堆石子,现要将石子有次序地合并成一堆,规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. ...
最新文章
- 网站推广专员浅析如何做好网站推广与运营?
- wine清除软件残余图标
- 《深入理解C++11:C++ 11新特性解析与应用》——1.3 C++11特性的分类
- Qt QTcpSocket 对连接服务器中断的不同情况进行判定
- malloc()函数解析
- linux qt usb转串口通信,centos7 Qt USB转串口通信
- 设计php框架_PHP微型框架设计
- 失败全是无能,成功多是侥幸。
- Julia : |>的用法及多参数下的使用
- R语言【箱线图和茎叶图】
- 基于视角变化的视频关键帧提取方法(附代码地址)
- BZOJ 4079 [Wf2014] Pachinko
- 对接企业微信4:接收消息与事件
- MRO工业品采购如何降低成本?SCM供应链管理系统助力企业优化采购流程
- 根据两点经纬度计算两点距离...工具类
- Ajax保留浏览器历史的两种解决方案(HashPjax)
- 安卓模拟器安装教程_安卓终端模拟器-安卓命令行入门教程系列(新手的福利)
- web页面之搜索、高级搜索功能
- terminate called after throwing an instance
- 创业兵法——网络营销让你的产品家喻户晓
热门文章
- Android应用push到/system/app/后so库不能加载
- Exclusive or
- w ndows只能安装到gpt磁盘,安装win10系统时提示windows只能安装到GPT磁盘如何解决[多图]...
- 求10000里的阶乘C语言,最详细的注释,看不懂你来打我
- java语言中定义的字节输出流_Java语言中的输入输出流包括字节流、字符流、文件流、对象流以及线程之间通信的管道流,【 】包中的类...
- Oracle问题之ORA-12560TNS:协议适配器错误-转载
- 苹果三星小心了!传微软正开发智能手表
- 服务器显示发送时间为送达,邮件流正常传递,但是送达报告状态显示挂起
- 【行研报告】短视频创作者作品发布时间研究报告—附下载链接
- 洛谷P3469 [POI2008]BLO-Blockade(割点过程计算bcc)