题目链接

https://www.acwing.com/problem/content/284/

思路

因为只能合并相邻的两堆石子,并且首位不构成环,那么我们用f[i][j]f[i][j]f[i][j]表示区间[i,j][i,j][i,j]这个范围的一个合并最小值那么我们思考这个状态怎么转移过来,显然的是肯定是从更加细微的区间转移过来,那么我们就对区间进行一个划分操作,我们将其划分为[i,k][i,k][i,k]和[k+1,j][k+1,j][k+1,j]两部分,然后将这两个区间合并,那么我们只需要枚举一下k的位置即可,那么还有一个问题,我们[i,k][i,k][i,k]和[k+1,j][k+1,j][k+1,j]这个区间的值怎么来呢,这个值应该是要从更小的区间长度转移过来,那么我们现在明白了,我们首先枚举的应该是区间长度,我们从长度为2开始枚举,因为刚好这样能花费成两个最小的区间,然后我们再去枚举一下起点位置,有了起点,我们就能知道终点的长度(因为区间长度我们已经枚举了),最后我们枚举一下区间的划分点就好啦,详情请看代码,状态转移方程大概是:
f[l][r]=min(f[l][r],f[l][j]+f[j+1][r]+sum)f[l][r] = min(f[l][r],f[l][j] + f[j+1][r] + sum)f[l][r]=min(f[l][r],f[l][j]+f[j+1][r]+sum)
这里的这个sum表示的是区间[l,r][l,r][l,r]的合并值,显然是固定的

代码

#include<bits/stdc++.h>
using namespace std;const int N = 3e2+10;
const int INF = 0x3f3f3f3f;
int n,f[N][N],pre[N];int main()
{cin>>n;for(int i = 1;i <= n; ++i) cin>>pre[i],pre[i] += pre[i-1];for(int len = 2;len <= n; ++len) {for(int l = 1;l + len - 1 <= n; ++l){int r = l + len - 1;int sum = pre[r] - pre[l-1];f[l][r] = INF;for(int j = l;j < r; ++j)f[l][r] = min(f[l][r],f[l][j] + f[j+1][r] + sum);}}cout<<f[1][n]<<endl;return 0;
}

石子合并简化版(区间DP)相关推荐

  1. 算法基础课-动态规划-区间dp-AcWing 282. 石子合并:区间dp

    文章目录 题目分析 题目链接 题目分析 只能合并相邻两堆.求体力最小值 数据比较弱,最多300堆,每堆重量不超过1000. 状态表示 f[i][j]表示合并区间[i,j]需要的最小体力 状态转移 把区 ...

  2. SDNU 1048.石子合并2(区间dp)

    Description 有n堆石子排成一圈,每次选择相邻的两堆石子,将其合并为一堆,记录该次合并的得分为两堆石子个数之和.已知每堆石子的石子个数,求当所有石子合并为一堆时,最小的总得分. Input ...

  3. 石子合并(区间dp)

    题目链接 设有N堆石子排成一排,其编号为1,2,3,-,N. 每堆石子有一定的质量,可以用一个整数来描述,现在要将这N堆石子合并成为一堆. 每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合 ...

  4. SDNU 1013.石子合并简化版

    SDNU 1013.石子合并简化版 Time Limit: 1000 MS Memory Limit: 32768 KB Total Submission(s): 709 Accepted Submi ...

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

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

  6. CSP认证201612-4 压缩编码[C++题解]:区间dp、huffman树、石子合并

    题目分析 来源:acwing 分析: 本题难在想到是区间dp.想到区间dp之后,这就是石子合并的代码直接默写. 那么是如何建模的呢?我们把huffman编码(这里要求按照字典序大小编码,和huffma ...

  7. AcWing 1068. 环形石子合并(环形区间DP)

    AcWing 1068. 环形石子合并(环形区间DP) 一.问题 二.思路 三.代码 一.问题 二.思路 在讲解这道题之前,我们需要先掌握线性的区间DP问题,如果对于线性区间DP的解决方式还不了解的话 ...

  8. dp2:线性dp、区间dp、计数dp.

    线性dp   动态规划时间复杂度分析,状态数目与状态转移次数相乘. 数字三角形 数字三角形 以集合的观点考虑dp问题. #include<iostream> #include<cst ...

  9. 动态规划 —— 区间 DP

    [概述] 区间型动态规划,又称为合并类动态规划,是线性动态规划的扩展,它在分阶段地划分问题时,与阶段中元素出现的顺序和由前一阶段的区间中哪些元素合并而来有很大的关系. [思想] 区间 DP 实质上就是 ...

最新文章

  1. C++语言基本类型—浮点型
  2. [转]英语飙升的好方法
  3. java打包没有src_maven 打包时,src/main/java目录下的xml等资源文件没有打包进去的问题...
  4. 多核服务器的JVM优化选项(转载)
  5. Java中getResourceAsStream的用法小结
  6. ElasticSearch学习笔记(一)—了解及装配
  7. P3811-[模板]乘法逆元【线性求逆元】
  8. quarkus_Quarkus入门
  9. windows7系统软件无法卸载的解决方法
  10. 【mac】Mac 安装 RabbitMQ
  11. asp.net关于页面不回发,不生成__doPostBack方法问题的完美解决方案--ZT
  12. Linux - iptables
  13. 如何使用 chrome devtool 分析前端代码执行耗时和内存占用
  14. ae遮罩路径图形扭曲插件BAO Boa
  15. 苹果锁定计算机的快捷键,苹果电脑快捷键使用 Mac快捷键大全详细介绍
  16. python视频格式转换_用Python+FFmpeg进行音视频格式转换
  17. Spring Cloud之初入篇
  18. VC苹果版:iPhone iOS下载安装《罪恶都市》侠盗飞车GTA的方法
  19. python3 [爬虫入门实战]爬取熊猫直播用户信息
  20. 分贝通SAAS企业大数据体系建设经验分享

热门文章

  1. 树莓派4B设置双网卡静态IP、网卡优先级、查看系统多少位
  2. Pytorch 学习笔记:
  3. 调试错误:InternalErro(seeabovefortraceback):BlasGEMMlaunchfailed:a.shape=(300,1),b.shape=(1,10),m=300,n=
  4. 网络虚拟化基础协议之Geneve
  5. Cookies 和 Session的区别
  6. 一步一步学FRDM-KE02Z(一):IAR调试平台搭建以及OpenSDA两种工作模式设置
  7. 浅谈Borg/YARN/Mesos/Torca/Corona一类系统
  8. 2. Spring Boot项目启动原理初探
  9. Python并发编程之线程池/进程池
  10. java中PriorityQueue优先级队列使用方法