合并石子

时间限制: 1 Sec  内存限制: 128 MB
提交: 7  解决: 7
[提交][状态][讨论版][命题人:quanxing]

题目描述

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

计算出将N堆石子合并成一堆的最小得分。

输入

第一行为一个正整数N (2≤N≤100);

以下N行,每行一个正整数,小于10000,分别表示第i堆石子的个数(1≤i≤N)。

输出

一个正整数,即最小得分。

 

样例输入

7
13
7
8
16
21
4
18

样例输出

239
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include<deque>
#define inf 0x3f3f3f3f
using namespace std;
int a[];
int dp[][];
//dp[i][j]是把第i堆推到第j堆得最优值
int s[];
int main()
{
int n;
cin>>n;
s[]=;
memset(dp,inf,sizeof(dp));
for(int i=;i<=n;i++)
{
cin>>a[i];
dp[i][i]=;
s[i]=s[i-]+a[i];
}
for(int i = n; i>=; i--)//不能反过来,因为,要在已知后面dp[i][k]+dp[k+1][j]的情况下推得
for(int j = i + ; j <= n; j++)
for(int k = i; k <= j - ; k++)
dp[i][j] = min(dp[i][j], dp[i][k]+dp[k+][j]+s[j]-s[i-]); cout<<dp[][n];
return ;
}
 

最新文章

  1. tab切换-2016.6.4
  2. 关于WEB Service&amp;WCF&amp;WebApi实现身份验证之WCF篇(2)
  3. Android APK反编译详解(附图)
  4. iOS 渐变提示。Labe自动换行
  5. [转载] HTTP请求的TCP瓶颈分析
  6. Python integer objects implementation
  7. 基于h5+ajax实现的手机定位
  8. IOS 实现QQ好友分组展开关闭功能
  9. RTTI-CLASS
  10. jquery选择器之层级过滤选择器
  11. Java 9 揭秘(2. 模块化系统)
  12. [THUWC2017]随机二分图
  13. 【转载】Pytorch tutorial 之Datar Loading and Processing
  14. BZOJ2219数论之神——BSGS+中国剩余定理+原根与指标+欧拉定理+exgcd
  15. 完全理解 Python 迭代对象、迭代器、生成器
  16. Docker备忘录
  17. BZOJ.4766.文艺计算姬(Prufer)
  18. Windows 7系统下安装和卸载删除IE的方法
  19. NOSQL学习之一:Memcached, Redis, MongoDB区别
  20. test20180919 递归问题

热门文章

  1. 更新CentOS 6.7源为阿里源
  2. Spring简洁版总结
  3. 实际工作中遇到关于Struts2线程安全的问题解决
  4. 【Python那些事儿之十】range()和xrange()
  5. Kinect 2.0 默认姿势的中文意思
  6. Appium 自动化测试(4)-- 脚本开发:官方demo演示 android_contacts.py
  7. lightoj1370欧拉函数/素数筛
  8. 51nod 1161 组合数,规律
  9. saltstack技术入门与实践
  10. ASP.NET MVC性能优化(实际项目中)