【题目大意】

在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。试设计出1个算法,计算出将N堆石子合并成1堆的最大得分。

【思路】

设 dp[i][j] 表示第 i 到第 j 堆石子合并的最优值,sum[i][j] 表示第 i 到第 j 堆石子的总数量。

 #include<iostream>
#include<cstdio>
using namespace std;
const int N=;
const int INF=0x7fffffff;
int n;
int a[N],sum[N],dp[N][N],s[N][N]; void f()
{ for (int i=;i<=n;i++) dp[i][i]=,s[i][i]=i;
for (int r=;r<n;r++)
{
for (int i=;i<n;i++)
{
int j=i+r;
if(j>n) break;
dp[i][j]=INF;
for (int k=s[i][j-];k<=s[i+][j];k++)
{
if(dp[i][j]>dp[i][k]+dp[k+][j])
{
dp[i][j]=dp[i][k]+dp[k+][j];
s[i][j]=k;
}
}
dp[i][j]+=sum[j]-sum[i-];
}
}
} int main()
{
while(~scanf("%d",&n))
{
sum[]=;
for (int i=;i<=n;i++)
{
scanf("%d",&a[i]);
sum[i]=sum[i-]+a[i];
}
f();
printf("%d\n",dp[][n]);
}
return ; }

最新文章

  1. Palo(OLAP database)&ndash;MOLAP
  2. MVC5-5 Razor引擎及视图结构
  3. Python的with语句
  4. Google Kubernetes设计文档之服务篇-转
  5. libcurl 使用的几个注意事项
  6. jquery图片3D旋绕效果 rotate3Di的操作
  7. Python中yield深入理解
  8. leetcode第40题--First Missing Positive
  9. ch2-mysql相关
  10. Django入门(一)
  11. 通过代码配置 Log4net来实现日志记录
  12. Linux系统安装软件出错
  13. centos7配置consul
  14. VMware虚拟机Linux增加磁盘空间的扩容操作
  15. Spring mvc项目导出jar包无法识别正常映射问题
  16. 【刷题】LOJ 6009 「网络流 24 题」软件补丁
  17. MVC的Ajax异步请求
  18. python3学习笔记(5)_slice
  19. php正则表达式的三个最基本原则分享
  20. 14 MySQL--事务&amp;函数与流程控制

热门文章

  1. TreeMap put 操作分析
  2. 2008 Round 1A C Numbers (矩阵快速幂)
  3. VC调用易语言DLL
  4. perl6 struct2-045 EXP
  5. wifi钓鱼 强势拿你的wifi密码
  6. Git和Github简单教程【转】
  7. 挂载cifs报错mount error(13): Permission denied(域账号访问时报错)
  8. 《深入理解Java虚拟机》笔记--第三章 、垃圾收集器与内存分配策略
  9. tftp 开发板ping不通PC机
  10. [ python ] 练习作业 - 3