合并石子

题目

在一个操场上一排地摆放着N堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。请设计一个程序,计算出将N堆石子合并成一堆的最小得分。

输入

每组数据第1行为一个正整数N(2<=N<=100),以下N行,每行一个正整数,小于10000,分别表示第i堆石子的个数(1<=i<=N)。

输入样例

7
13
7
8
16
21
4
18

输出

对于每组数据输出一个正整数,即最小得分。

输出样例

239

思路

这道题有三种解法:

方法一

枚举边界,然后枚举长度
f[i,j] 表示从第i个到第j个中,所有的数合并的最小代价
动态转移方程为:

f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+s[j]-s[i-1]);
方法二

先枚举长度,再枚举边界
f[i,j] 表示从第i个到第j个中,所有的数合并的最小代价
动态转移方程为:

f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+sum[i][j]);
方法三

枚举边界,然后枚举长度
f[i,j] 表示从第i个起,接下来的j个数合并的最小代价
动态转移方程为:

f[i,j]=min(f[i][j],f[i,k]+f[i+k,j-k]+sum[i,j]);

代码

第一种
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int f[101][101],s[101],n,temp;//初始化
int main()
{memset(f,127/3,sizeof(f));//先把f里的所有数变成一个很大的数scanf("%d",&n);//读入for (int i=1;i<=n;i++){scanf("%d",&temp);//读入s[i]=temp+s[i-1];//计算前缀和f[i][i]=0;//标记初始的值}for (int i=n-1;i>=1;i--)for (int j=i+1;j<=n;j++)for (int k=i;k<=j-1;k++)f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+s[j]-s[i-1]);//状态转移方程printf("%d",f[1][n]);//输出return 0;
}
第二种
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int f[101][101],s[101],n,temp;//初始化
int main()
{memset(f,127/3,sizeof(f));//先把f里的所有数变成一个很大的数scanf("%d",&n);//读入for (int i=1;i<=n;i++){scanf("%d",&temp);//读入s[i]=temp+s[i-1];//计算前缀和f[i][i]=0;//标记初始的值}for(int len=2;len<=n;len++)for(int i=1;i<=n-len+1;i++){int j=i+len-1;//定义边界for(int k=i;k<=j-1;k++)f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+s[j]-s[i-1]);//状态转移方程}printf("%d",f[1][n]);//输出return 0;
}
第三种
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int f[101][101],s[101],n,temp;//初始化
int main()
{memset(f,127/3,sizeof(f));//先把f里的所有数变成一个很大的数scanf("%d",&n);//读入for (int i=1;i<=n;i++){scanf("%d",&temp);//读入s[i]=temp+s[i-1];//计算前缀和f[i][1]=0;//标记初始的值}for (int j=2;j<=n;j++)for (int i=1;i<=n-j+1;i++)for (int k=1;k<=j-1;k++)f[i][j]=min(f[i][j],f[i][k]+f[i+k][j-k]+s[i+j-1]-s[i-1]);//状态转移方程printf("%d",f[1][n]);//输出return 0;
}

合并石子(三种方法)相关推荐

  1. (doc, docx)文档合并的三种方法

    Word文档合并几种方式 通过com.spire.doc包 具体参考地址:https://www.e-iceblue.cn/spiredocforjavaoperating/merge-word-do ...

  2. 两个有序表的合并(三种方法)

    设有两个递增排列的有序表,要求合并后仍按递增(非递减)有序排列 目录 一.顺序表 1.1 初始化顺序表 1.2 创建顺序表 1.3 合并两个有序表 1.4

  3. 【小f的刷题笔记】(JS)链表 - 合并 k 个有序链表 LeetCode23 - 顺序合并暴力三种方法

    [链表] 合并 k 个有序链表:

  4. 使用ffmpeg合并视频文件的三种方法

    ffmpeg合并视频的方法有三种.国内大多数仅介绍了其中之一.于是觉得有必要翻译一下.其实在ffmpeg的 FAQ文档中有比较详细的说明. 使用concat协议进行视频文件的合并 这种方式的适用场景是 ...

  5. PDF文件怎么合并在一起?这三种方法快利用起来

    如何将几个PDF文件合并到一起呢?PDF文件相信大家是经常会使用到的,有时候为了工作上的需求,需要把几个PDF文件合并到一起来传输发送,最近有很多小伙伴私信来说不知道怎么把文件进行合并,今天给大家整理 ...

  6. java-pdf合并三种方法实现以及简单效率对比

    在之前项目有个功能中需要做多个PDF合并,而且可能pdf数量会很多,所以在实现了三种方式后做了一下简单的时间对比 第一种方法 用的spire.doc.free依赖 <dependency> ...

  7. python合并ts视频(三种方法)

    前言:最近在爬取某个网站的视频,但是里面的视频数据是以ts文件的形式给出的.一个大的视频被切分成了很多小的ts视频,所以,合并这些ts视频就成为必要的了.我在网上搜到了三种方法,现在整理出来分享给大家 ...

  8. js合并两个数组的三种方法

    js合并数组的三种方法 前提:两个数组a=[1,2,3,4].b=[5,6,7],将其合并为一个数组 1. concat //js的Array对象提供了一个叫concat()方法,连接两个或更多的数组 ...

  9. ABAP屏幕上显示LIST的三种方法

    屏幕上显示LIST的三种方法 在abap开发中,经常有用户提出list的需求,实现的方法很多,通常用的有以下三种总结一下供大家参考: 1:手工添加-就是根据需要把LIST要显示的内容一条一条加到LIS ...

  10. Python3 列表list合并的4种方法

    方法1: 直接使用"+"号合并列表 aList = [1,2,3] bList = ['www', 'python.com'] cList = aList + bList dLis ...

最新文章

  1. SpringBoot+Mybatis+Swagger2环境搭建
  2. mysql中blob_MySQL中的BLOB类型
  3. QB:基于深度学习的病毒序列识别
  4. ubuntu修改u盘权限_Ubuntu下提示U盘没有些权限的只能读不能写
  5. Ubuntu 安装软件方法
  6. BCH两周年独立日已至,世界各地爱好者纷纷举办Meetup庆祝
  7. Django Context对象 + 过滤器 + 标签
  8. SAP 库存关联表信息
  9. [HIVE] shell调用hive客户端导致nohup后台进程stopped
  10. java中使用okhttpsoap,Android okHttp网络请求之Retrofit+Okhttp+RxJava组合
  11. makefile的两个变量(自动变量和普通变量)
  12. JS获取指定月的前N个月数据
  13. 由数据范围反推算法复杂度
  14. python调用r语言函数_Python 中使用R语言
  15. android studio 2.3.3 最新 中文 汉化包 韩梦飞沙 安卓工作室 美化包
  16. node.js接入微信公众号开发
  17. 服务器上的VGA切换原理,什么是VGA接口 原理及特点是什么
  18. UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x80 in position 198: illegal multibyte sequence
  19. 医院影像服务器系统,锐潮医学影像管理系统(PACS)
  20. PHP 如何获取客户端的IP地址

热门文章

  1. 全闪存存储、混合闪存存储
  2. 模拟器件之三极管场效应管
  3. 如何高效地从BAM文件中提取fastq
  4. 如何分析多个极兔快递物流每个网点之间是否超过12小时
  5. 关于@Vaild注解的使用
  6. 爱企查青龙可跑 一个月一张爱奇艺月卡最细教程
  7. 火狐浏览器不兼容event问题
  8. bde连接oracle失败,BDE联接出错,求助
  9. openwrt广告屏蔽大师修复补丁luci-app-adbyby plus + lite
  10. php检索本地文件,神器:不仅秒搜本地文件,还能1秒在线检索文献!