石子合并(一)

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
 
描述
    有N堆石子排成一排,每堆石子有一定的数量。现要将N堆石子并成为一堆。合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆。求出总的代价最小值。
 
输入
有多组测试数据,输入到文件结束。
每组测试数据第一行有一个整数n,表示有n堆石子。
接下来的一行有n(0< n <200)个数,分别表示这n堆石子的数目,用空格隔开
输出
输出总代价的最小值,占单独的一行
样例输入
3
1 2 3
7
13 7 8 16 21 4 18
样例输出
9
239 区间dp,无论有多少堆石子,最后总要是分成了两堆,然后合成这两堆,我们要求出最小消耗值。
dp[start][end]表示取走start到end位置的石子的最小消耗值,
我们假设子问题答案已经求出,则有:dp[i][j]=MIN{dp[i][k]+dp[k+1][j]+SUM(i,j)|i<=k<j}
不难发现要想求出长度为len的区间的最小值,我们需要长度为(1---len-1)之间的最小值作为支撑递推继续下去的源泉,
所有想到,从长度为1开始递推直至推到长度为n也就是answer!
显然是一个O(N^3)复杂度的DP,有四边形优化为O(N^2),目前不会,以后补。

#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
int a[205],dp[205][205];
int sum[205][205];
int SUM(int s,int e)
{
if(sum[s][e]!=-1) return sum[s][e];
int sumn=0,i;
for(i=s;i<=e;++i) sumn+=a[i];
return sum[s][e]=sumn;
}
int main()
{
int n,m,i,j,k;
while(cin>>n){memset(dp,inf,sizeof(dp));memset(sum,-1,sizeof(sum));
for(i=1;i<=n;++i) scanf("%d",&a[i]),dp[i][i]=0;
for(k=2;k<=n;++k)                              //控制区间长度
for(i=1;i+k-1<=n;++i){                          //i表示起点,由于长度的限制i不可取任意值
int minn=inf;
for(j=i;j<=i+k-1;++j) if(dp[i][j]+dp[j+1][i+k-1]<minn) minn=dp[i][j]+dp[j+1][i+k-1];     //j表示从此点分开,minn表示后合并左右两堆最小的值
dp[i][i+k-1]=minn+SUM(i,i+k-1);
}
cout<<dp[1][n]<<endl;
}
return 0;
}

最新文章

  1. 20145205 《Java程序设计》第7周学习总结
  2. phpcms v9网站搬家更换域名的方法
  3. bootstrap分页插件--Bootstrap Paginator的使用&amp;AJAX版备份(可单独使用)
  4. atitit.html5 拼图游戏的解决之道.
  5. vue.js——初体验
  6. jquery Mobile应用第2课《构建跨平台APP:jQuery Mobile移动应用实战》连载二(简单的QWER键盘)
  7. 史上最佳 Mac+PhpStorm+XAMPP+Xdebug 集成开发和断点调试环境的配置
  8. oracle批量导入数据
  9. thinkphp G方法的华丽升级
  10. CCF NOIP2015复赛获奖分数线及名额分配办法
  11. 为什么要用Math.sqrt(i)方法
  12. RoleManager 进行角色管理
  13. 修改select选中项
  14. spark使用总结
  15. php解决表单重复提交
  16. 51nod 1179 最大的最大公约数
  17. ●BZOJ 3129 [Sdoi2013]方程
  18. springMVC工作过程
  19. nodejs 从部署到域名访问
  20. php中获取当前时间

热门文章

  1. Nginx能做什么
  2. web前端----css选择器样式
  3. ACM题目————困难的串
  4. 使整个页面变灰的css代码
  5. jdbc连接池c3p0/dbcp强制连接超过设置时间后失效
  6. 如何写出安全的 API 接口?接口参数加密签名设计思路
  7. Android实践项目汇报总结(上)修改
  8. yum第三方安装-软件包没签名及更新错误
  9. bootstrap栅格系统进行偏移格式
  10. Android程序示例