目录

1 问题描述

2 解决方案

 


1 问题描述

问题描述
  在一条直线上有n堆石子,每堆有一定的数量,每次可以将两堆相邻的石子合并,合并后放在两堆的中间位置,合并的费用为两堆石子的总数。求把所有石子合并成一堆的最小花费。
输入格式
  输入第一行包含一个整数n,表示石子的堆数。
  接下来一行,包含n个整数,按顺序给出每堆石子的大小 。
输出格式
  输出一个整数,表示合并的最小花费。
样例输入
5
1 2 3 4 5
样例输出
33
数据规模和约定
  1<=n<=1000, 每堆石子至少1颗,最多10000颗。

2 解决方案

本题主要考查动态规划法思想。

刚开始做的时候,使用贪心法求解,即每次选择相邻两个和为最小的一组合成堆,结果评分为10分,后来仔细想了一下,贪心法不能达到最优解,唯有使用动态规划法求解。

该题几乎和训练题集中的矩阵相乘一样,具体思想讲解,请参考本人另一篇博客:算法笔记_081:蓝桥杯练习 算法提高 矩阵乘法(Java)

具体代码如下:

import java.util.Scanner;public class Main {public long getSum(long[] A, int a, int b) {long sum = 0;for(int i = a;i <= b;i++)sum += A[i];return sum;}public void printResult(long[] A) {if(A.length == 1) {System.out.println(A[0]);return;}long[][] dp = new long[A.length + 1][A.length + 1];for(int len = 2;len <= A.length;len++) {for(int i = 1, j = len;j <= A.length;i++,j++) {long min = Long.MAX_VALUE;for(int k = i;k < j;k++) {if(min > dp[i][k] + dp[k + 1][j] + getSum(A, i - 1, j - 1))min = dp[i][k] + dp[k + 1][j] + getSum(A, i - 1, j - 1);}dp[i][j] = min;}}System.out.println(dp[1][A.length]);return;}public static void main(String[] args) {Main test = new Main();Scanner in = new Scanner(System.in);int n = in.nextInt();if(n < 1 || n > 1000)return;long[] A = new long[n];for(int i = 0;i < n;i++) {A[i] = in.nextLong();}test.printResult(A);}
}

转载于:https://www.cnblogs.com/liuzhen1995/p/6561915.html

算法笔记_083:蓝桥杯练习 合并石子(Java)相关推荐

  1. 算法笔记_056:蓝桥杯练习 未名湖边的烦恼(Java)

    目录 1 问题描述 2 解决方案 2.1 递归法 2.2 递推法   1 问题描述 问题描述 每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰 ...

  2. 算法笔记_096:蓝桥杯练习 算法提高 求最大值(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 给n个有序整数对ai bi,你需要选择一些整数对 使得所有你选定的数的ai+bi的和最大.并且要求你选定的数对的ai之和非负,bi之和非负 ...

  3. 算法提高 求最大值java_算法笔记_096:蓝桥杯练习 算法提高 求最大值(Java)

    1 问题描述 问题描述 给n个有序整数对ai bi,你需要选择一些整数对 使得所有你选定的数的ai+bi的和最大.并且要求你选定的数对的ai之和非负,bi之和非负. 输入格式 输入的第一行为n,数对的 ...

  4. 算法笔记_098:蓝桥杯练习 算法提高 盾神与条状项链(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 有一天,盾神捡到了好多好多五颜六色的珠子!他心想这些珠子这么漂亮,可以做成一条项链然后送给他心仪的女生~于是他用其中一些珠子做成了长度为n ...

  5. 算法笔记_120:蓝桥杯第六届省赛(Java语言B组部分习题)试题解答

     目录 1 三角形面积 2 立方变自身 3 三羊献瑞 4 九数组分数 5 饮料换购 6 生命之树   前言:以下试题解答代码部分仅供参考,若有不当之处,还请路过的同学提醒一下~ 1 三角形面积 三角形 ...

  6. 算法笔记_080:蓝桥杯练习 队列操作(Java)

    目录 1 问题描述 2 解决方案 1 问题描述 问题描述 队列操作题.根据输入的操作命令,操作队列(1)入队.(2)出队并输出.(3)计算队中元素个数并输出. 输入格式 第一行一个数字N. 下面N行, ...

  7. 算法笔记_100:蓝桥杯练习 算法提高 三个整数的排序(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 输入三个数,比较其大小,并从大到小输出. 输入格式 一行三个整数. 输出格式 一行三个整数,从大到小排序. 样例输入 33 88 77 样 ...

  8. 算法笔记_094:蓝桥杯练习 矩阵相乘(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 小明最近在为线性代数而头疼,线性代数确实很抽象(也很无聊),可惜他的老师正在讲这矩阵乘法这一段内容. 当然,小明上课打瞌睡也没问题,但线性 ...

  9. Java算法学习:蓝桥杯——地宫寻宝(DFS+动态规划—记忆型递归)

    Java算法学习:蓝桥杯--地宫寻宝(DFS✖记忆型递归) 题目: 标题:地宫取宝X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签.地宫的入口在左上角,出 ...

  10. c语言奇怪的分式11,蓝桥杯-奇怪的分式-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

最新文章

  1. 《Cacti实战》——导读
  2. python是结构化语言_NLP是如何工作的:把自然语言(尽可能)结构化
  3. C# 创建网站 无法启动与停止的问题
  4. 圣思园java se培训总结(82-)(观察者设计模式)
  5. Hadoop配置机架感知(python脚本)
  6. 轮询数据库 java_谁做过定时任务,轮询查询数据。
  7. FCKeidtor的toolbarset的设置
  8. 【AI视野·今日CV 计算机视觉论文速览 第173期】Wed, 25 Dec 2019
  9. 望图知意-Yahoo VS 3721
  10. python中类的构成_Python类的构成元素
  11. Java基础语法(基本语句)
  12. Oracle exists与not exists的用法总结
  13. 分享:20 本优秀的 Python 电子书
  14. 如何将原生PDF转为纯图像Word?
  15. 如何删除2345浏览器网络导航主页
  16. leadbbs 上ID为Robin·H的东西,有空瞧瞧....
  17. 短视频直播行业服务器选择
  18. Ubuntu开启SSH服务以及使用Putty远程控制的解决办法
  19. python画圆形螺旋线_Python写的弹球小游戏
  20. 智能车浅谈——硬件篇

热门文章

  1. IPv6 SLAAC原理详解及配置
  2. shell 第六次作业(grep正则、sed)
  3. HDOJ--1869--六度分离(用三种算法写的,希望能比较出来他们之间的区别)
  4. 机器学习分类模型评价指标和方法
  5. 整理学 nodejs 资源
  6. 解释说明CCIE考试中的RIP问题
  7. matlab 2d pml,二维TM波,PML边界,matlab程序。但是仿真结果有问题,求高手。
  8. 用php动态创建图像,php利用imagecreatetruecolor动态生成高清图片代码
  9. 应用动态html教学反思,12月份教学反思:百分数的应用(一)反思
  10. Redis 6.0 源码阅读笔记(2) -- Redis 多线程原理