AcWing 石子合并
1、题目描述
设有N堆石子排成一排,其编号为1,2,3,…,N。
每堆石子有一定的质量,可以用一个整数来描述,现在要将这N堆石子合并成为一堆。
每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。
例如有4堆石子分别为 1 3 5 2, 我们可以先合并1、2堆,代价为4,得到4 5 2, 又合并 1,2堆,代价为9,得到9 2 ,再合并得到11,总代价为4+9+11=24;
如果第二步是先合并2,3堆,则代价为7,得到4 7,最后一次合并代价为11,总代价为4+7+11=22。
问题是:找出一种合理的方法,使总的代价最小,输出最小代价。
输入格式
第一行一个数N表示石子的堆数N。
第二行N个数,表示每堆石子的质量(均不超过1000)。
输出格式
输出一个整数,表示最小代价。
数据范围
1≤N≤3001≤N≤300
输入样例:
4 1 3 5 2
输出样例:
22
2、分析
3、代码
import java.io.*;
import java.util.*;public class Main{static int N = 310, M = 1010;static int[][] f = new int[N][N];static int[] g;static int[] s;public static void main(String[] args) {Scanner in = new Scanner(new InputStreamReader(System.in));int n = in.nextInt();g = new int[n + 1];s = new int[n + 1];for(int i = 1;i <= n;i ++) {g[i] = in.nextInt();s[i] = s[i-1] + g[i];}//区间dpfor(int len = 2;len <= n;len ++) { //枚举长度for(int i = 1;i + len -1 <= n;i ++) { //枚举左端点int j = i + len - 1;f[i][j] = Integer.MAX_VALUE;for(int k = i;k < j;k ++) f[i][j] = Math.min(f[i][j], f[i][k] + f[k+1][j] + s[j] - s[i-1]);}}System.out.println(f[1][n]);}
}
AcWing 石子合并相关推荐
- AcWing 1068. 环形石子合并
AcWing 1068. 环形石子合并 题意: n堆石头围成一个圈,然后将相邻两堆合并成新的一堆,得分为新的一堆的石头数 问最高得分合最低得分 题解: 很简单,区间dp的模板题 和这个题一样 状态转移 ...
- AcWing 1068. 环形石子合并(环形区间DP)
AcWing 1068. 环形石子合并(环形区间DP) 一.问题 二.思路 三.代码 一.问题 二.思路 在讲解这道题之前,我们需要先掌握线性的区间DP问题,如果对于线性区间DP的解决方式还不了解的话 ...
- AcWing.282石子合并(区间DP)题解
石子合并 题目描述 设有N堆石子排成一排,其编号为1,2,3,-,N. 每堆石子有一定的质量,可以用一个整数来描述,现在要将这N堆石子合并成为一堆. 每次只能合并相邻的两堆,合并的代价为这两堆石子的质 ...
- 【动态规划dp】区间DP模板 Acwing 282. 石子合并 | P3205 [HNOI2010]合唱队
区间DP 模板 282. 石子合并 #include<iostream> #include<cmath> #include<algorithm> #include& ...
- CSP认证201612-4 压缩编码[C++题解]:区间dp、huffman树、石子合并
题目分析 来源:acwing 分析: 本题难在想到是区间dp.想到区间dp之后,这就是石子合并的代码直接默写. 那么是如何建模的呢?我们把huffman编码(这里要求按照字典序大小编码,和huffma ...
- 石子合并[DP-N3]
题目描述 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1个算法,计算出将N堆石子合并成1 ...
- 算法基础课-动态规划-区间dp-AcWing 282. 石子合并:区间dp
文章目录 题目分析 题目链接 题目分析 只能合并相邻两堆.求体力最小值 数据比较弱,最多300堆,每堆重量不超过1000. 状态表示 f[i][j]表示合并区间[i,j]需要的最小体力 状态转移 把区 ...
- 51nod 1022 石子合并v2
就是石子合并的数据范围变为了1e3 经典四边形优化区间dp const int N = 2e3 + 10; const long long inf = 1e18; long long dp[N][N] ...
- NYOJ737 石子合并(一)区间动态规划
石子合并(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成 ...
最新文章
- 由“递归遍历二叉树”引发的思考
- 中小型企业如何选择服务器配置?
- 77. 组合016(回溯法)
- Java调用跟踪系统_Tracer:在分布式系统中的调用跟踪和日志相关
- OpenKruise - 云原生应用自动化引擎正式开源
- 数据库-MySQL中间的注释
- 一些老程序员不错的经验分享
- android 预优化oat_Android内存优化大盘点
- activemq中怎么知道推送消息是否成功_ActiveMQ入门
- 多元统计分析基于r课后答案_应用多元统计分析课后答案.doc
- 电脑蓝牙打电话-总结(篇外、虚拟声卡选型)
- android 单独设置APP语言
- 将两张图片合并成一个PDF,不收费
- h3c交换机划分vlan
- 第十六届中国研究生电子设计竞赛记录
- 第149篇 笔记-web3
- 学Python找工作你起码要会这些
- Apache的性能解读
- 腾讯99公益日-券券松鼠❤
- flask-sqlalchemy一对多 知了传课 flask web全栈开发实战 黄勇