Description

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

Input

第一行一个整数n(1 <= n <= 200),表示石子堆数; 第二行n个整数a(1 <= a <= 100),表示每堆石子的个数,这些石子首尾相接排成一圈。

Output

一个整数,表示最小总得分。

Sample Input

5
7 6 5 7 100

Sample Output

175

Source

Unknown
#include<bits/stdc++.h>
using namespace std;#define ll long long
#define eps 1e-9
#define pi acos(-1)const int inf = 0x3f3f3f3f;
const int mod = 1e9+7;
const int maxn = 1000 + 8;int n, a[maxn], sum[maxn], dp[maxn][maxn], mi;int main()
{std::ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n;sum[0] = 0;for(int i = 1; i <= n; i++){cin >> a[i];sum[i] += a[i] + sum[i - 1];}for(int len = 1; len <= n; len++){for(int i = 1; i <= n; i++){int en = (i + len) % n == 0 ? n : (i + len) % n;int tmp;if(i + len <= n)tmp = sum[i + len] - sum[i - 1];elsetmp = sum[n] - sum[i - 1] + sum[(i + len) % n];dp[i][en] = inf;for(int k = 0; k < len; k++)dp[i][en] = min(dp[i][en], dp[i][(i + k) % n == 0 ? n : (i + k) % n] + dp[(i + k + 1) % n == 0 ? n : (i + k + 1) % n][en] + tmp);}}mi = dp[1][n];for(int i = 2; i <= n; i++)if(mi > dp[i][i - 1])mi = dp[i][i - 1];cout << mi <<'\n';return 0;
}

转载于:https://www.cnblogs.com/RootVount/p/11480394.html

SDNU 1048.石子合并2(区间dp)相关推荐

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

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

  2. 石子合并(区间dp)

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

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

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

  4. SDNU 1045.石子合并1(区间dp)

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

  5. SDNU 1178.能量项链(区间dp)

    Description 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠 ...

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

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

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

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

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

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

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

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

最新文章

  1. gcvt字符串转换函数应用实例
  2. Sublime Text 关闭自动更新
  3. YII中session和cookie
  4. 如何进行聚类可视化_如何使用matplotlib包进行数据可视化
  5. 分布式数据库与缓存双写一致性方案解疑
  6. 计算机虚拟机安装教程,VMware(虚拟机)装Win7系统详细图文教程
  7. 汇编语言--寄存器间接寻址
  8. checkio Ascending List
  9. Excel条件格式使用小总结
  10. 计算机课前导学结题报告,《导学──自悟》课题研究的结题报告
  11. 微信抢票——迭代周期一结束后感想
  12. SQL实战45.将titles_test表名修改为titles_2017
  13. 解决方案之Android 国际化资源完美兼容6.0,7.0,8.0
  14. Collections集合
  15. C语言通讯录系统程序设计
  16. 人人极客专访 | 我和我们的操作系统
  17. 昂达平板不能开机刷机_昂达平板电脑打不开机怎么办
  18. MySQL知识点详解
  19. iGrimace1.44基本使用方式
  20. 上海高中计算机学校门槛,“魔都”上海最难进的5所中学,入学门槛高,能进的人都不一般@...

热门文章

  1. DSP2812程序执行过程
  2. 【进程】进程通信-共享内存
  3. Android之Tab分页标签的实现方法--------采用ActivityGroup和GridView的结合
  4. 《Orange’s 一个操作系统的实现》3.保护模式3----DOS加载.EXE过程
  5. C#中Equals和==的比较
  6. MySQL的ODBC安装错误问题!
  7. seo技巧-2015/10/05
  8. 如何打造一款出色的APP
  9. ★自制社交网站等级称号
  10. openstack+essex+quantum成功show