动态规划-石子合并.pptVIP

  • 11
  • 0
  • 约 16页
  • 2015-09-24 发布于江西
  • 举报
动态规划-石子合并

此问题的三个版本 任意版:有N堆石子,现要将石子有序的合并成一堆,每次只能移动任意的2堆石子合并,合并花费为将的一堆石子的数量。 (贪心算法,哈夫曼编码问题) 直线版:在一条直线上摆着N堆石子,其余条件不变。 圆形版:石子是排成圆形,其余条件不变。 问题初步分析 如果N-1次合并的全局最优解包含了每一次合并的子问题的最优解,那么经这样的N-1次合并后的得分总和必然是最优的。 此我们需要通过动态规划算法来求出最优解。 动态规划通项 通项式 a[i][j] = min{k | a[i][k] + a[k+1][j] + sum[i...j], k = i...j-1} (?) 其中a[i][j]表示从第i堆到第j堆合并能够取到的最小值,将其分解为两部分,从i到k,以及从k+1到j,再加上两大堆合并的得分。 部分关键代码1 int MatrixChain_min(int p[N],int n) { //定义二维数组m[i][j]来记录i到j的合并过成中最少石子数目 //此处赋值为-1 int m[N][N]; //初始化 for(int x=1;x=n;x++) for(int z=1;z=n;z++) { m[x

文档评论(0)

1亿VIP精品文档

相关文档