原题传送门

题目描述

设有 N(N≤300)N(N \le 300)N(N≤300) 堆石子排成一排,其编号为1,2,3,⋯,N1,2,3,\cdots,N1,2,3,⋯,N。每堆石子有一定的质量 mi(mi≤1000)m_i(m_i \le 1000)mi​(mi​≤1000)。现在要将这 NNN 堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻。合并时由于选择的顺序不同,合并的总代价也不相同。试找出一种合理的方法,使总的代价最小,并输出最小代价。

输入格式

第一行,一个整数 NNN。
第二行,NNN 个整数 mim_imi​。

输出格式

输出文件仅一个整数,也就是最小代价。

输入输出样例

输入 #1

4
2 5 3 1

输出 #1

22

题解

这是一道区间动规模板题

状态

dpi,jdp_{i,j}dpi,j​表示合并[i,j][i,j][i,j]区间的石子所需要的最小代价。

转移方程

将kkk做为[i,j][i,j][i,j]的分割点,那么[i,j][i,j][i,j]在kkk的最优解:

dpi,j=min⁡i≤k≤j(dpi,k+dpk+1,j+∑p=ijap)dp_{i,j}= \min_{i\le k \le j}(dp_{i,k} + dp_{k+1,j} + \sum_{p=i}^ja_p)dpi,j​=mini≤k≤j​(dpi,k​+dpk+1,j​+∑p=ij​ap​)
∑p=ijap\sum_{p=i}^ja_p∑p=ij​ap​ 可用前缀和实现

初始值

dpi,i=0dp_{i,i}=0dpi,i​=0

答案

dp1,ndp_{1,n}dp1,n​

代码

#include<bits/stdc++.h>
using namespace std;
const int MAX = 301;
int n;
int m[MAX],sum[MAX],dp[MAX][MAX];
int main(){cin >> n;for(int i=1;i<=n;i++)cin >> m[i];memset(dp,0x3f,sizeof(dp));for(int i=1;i<=n;i++)dp[i][i] = 0;for(int i=1;i<=n;i++)sum[i] = sum[i-1]+m[i];for(int len=2;len<=n;len++)for(int i=1;i+len-1<=n;i++){int j = i+len-1;for(int k=i;k<j;k++)dp[i][j] = min(dp[i][j],dp[i][k]+dp[k+1][j]+sum[j]-sum[i-1]);}cout << dp[1][n];return 0;
}

洛谷P1775 石子合并(弱化版)相关推荐

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

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

  2. P1775 石子合并(弱化版)(区间DP)

    题目链接:石子合并(弱化版) - 洛谷 分析:这个显然就是一个区间DP,定义f[i][j]为将第i~j堆石子合并成一堆石子所需要的最小代价,我们可以枚举最后一次将第i~j堆石子合并成一堆石子是以k为分 ...

  3. P1775 石子合并(弱化版)(区间dp模板)

    石子合并(弱化版) - 洛谷 /** @Description: To iterate is human, to recurse divine.* @Autor: Recursion* @Date: ...

  4. 洛谷题单的Python版题解(有需要的小伙伴可以来看看哦~!)

    我的洛谷博客 记得从这里搜索题目,分类有些问题.

  5. 贪心算法——洛谷(P1090)[NOIP2004]合并果子

    该题目也属于经典的贪心算法,在这里熟悉C++里优先队列的使用. 需要导入头文件:   #include<queue> 从这个问题可以深挖出神奇的哈夫曼树问题. 因为这题里合并的是二叉树,所 ...

  6. 【洛谷1090】合并果子

    题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可 ...

  7. 洛谷 P1631 序列合并

    嗯... 题目链接:https://www.luogu.org/problem/P1631 这道题很明显的是一个堆的问题,要开一个结构体的堆(结构体中记录下标.内容.个数)... 首先,把A和B两个序 ...

  8. 洛谷——P1775 古代人的难题_NOI导刊2010提高(02) P1936 水晶灯火灵(斐波那契数列)...

    P1775 古代人的难题_NOI导刊2010提高(02) P1936 水晶灯火灵 斐波那契数列 1.x,y∈[1-k],且x,y,k∈Z 2.(x^2-xy-y^2)^2=1 给你一个整数k,求一组满 ...

  9. 洛谷—— P1775 古代人的难题_NOI导刊2010提高(02)

    P1775 古代人的难题_NOI导刊2010提高(02) 题目描述 门打开了,里面果然是个很大的厅堂.但可惜厅堂内除了中央的一张羊皮纸和一支精致的石笔,周围几具骷髅外什么也没有.难道这就是王室的遗产? ...

最新文章

  1. [云炬python3玩转机器学习] 6-1什么是梯度下降法
  2. leetcode-551-Student Attendance Record I(判断是否出现连续几个相同字符)
  3. diskgenius 接触“只读“失败_相亲总是失败,这三个步骤你都做了吗?
  4. 半监督学习【机器学习】
  5. php 分支排序,php – 基于类别和分支的Mysql排名
  6. 除了富二代 据说这9种人最有富豪潜质
  7. 2021-07-31mysql 登录退出
  8. 实现子元素在父元素中水平垂直都居中笔记
  9. 「ds」网络操作系统和分布式操作系统之间的区别
  10. python查看指定文件的绝对路径和当前工作路径
  11. 如果不能产生价值,阅读便毫无意义
  12. 如何在CentOS8服务器上启用PowerTools
  13. 2022年第三次面试,含泪整理万字面试题。
  14. 开源配置管理系统的选择和搭建
  15. 第九章 科学、技术与工业
  16. gitlab自动同步github
  17. DCIC2021 入门数据比赛(1)
  18. 数字化时代-11:从马斯洛需求层次看未来选择做什么样的产品
  19. 国外10个ASP.Net C#下的开源CMS
  20. android WebView清除缓存

热门文章

  1. 实验室师哥阿里巴巴面试总结----菜冬瓜
  2. <!DOCTYPE html>作用
  3. ajax put 请求
  4. ndk开发教程,Android工程师面试该怎么准备?真香!
  5. 实习总结-2017.5.2
  6. 软考对找工作有帮助吗?
  7. 摄像头8mm可以看多远_折叠屏、透明屏、卷曲屏、拼接屏、屏下摄像头...未来屏显的先机都在这里...
  8. 开源飞控初探(二):无人机技术栈
  9. 获取实时股票数据与股票数据接口API
  10. 从100PV到1亿级PV网站架构演变(转)