石子问题

原创 2007年09月26日 21:39:00
题目描述:
有n堆石子,每次可以将相邻两堆合并为一堆,这次操作消耗的体力是这两堆石子数之和。最终需要将n堆石子合并为一堆,问最少要多少体力?
这些石子十分特殊:一开始的时候第i堆石子有i个石子,i=1,2,...,n.
#include <iostream>
#include 
<cstring>
using namespace std;
int f[1024][1024];
int main()
{
  
int i,j,k,tmp,min;
  
int num;
  cin
>>num;
  num
+=1;
  memset(f,
0,sizeof(f));
  
for(k=1;k<num-1;k++)
    
for(i=1;i+k<num;i++)
     
{
        min
=1000000000;
         tmp
=(i+k+1)*(i+k)/2-(i-1)*i/2;
          
for(j=i;j<i+k;j++)
          
{
            
            
if(f[i][j]+f[j+1][i+k]<min) 
                min
=f[i][j]+f[j+1][i+k];
          }

          f[i][i
+k]=min+tmp;
      }

   cout
<<f[1][num-1]<<endl;
   
return 0;
}

采用三层循环,动归实现.
 

石子合并问题--动态规划;贪心

石子合并问题石子合并问题是最经典的DP问题。首先它有如下3种题型: (1)有N堆石子,现要将石子有序的合并成一堆,规定如下:每次只能移动任意的2堆石子合并,合并花费为新合成的一堆石子的数量。求将这N堆...
  • gatieme
  • gatieme
  • 2015年10月17日 20:18
  • 5505

合并类动态规划,石子归并,合并石子解题报告

设有N堆沙子排成一排,其编号为1,2,3,…,N(N
  • txl16211
  • txl16211
  • 2014年10月30日 19:47
  • 5878

算法_动态规划_石子合并问题

问题描述: 在一个圆形操场的四周摆放着n 堆石子。现要将石子有次序地合并成一堆。 规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。 试设计一个算法,计算出将n...
  • huangxiang360729
  • huangxiang360729
  • 2016年04月11日 19:26
  • 1872

石子合并问题矩阵相乘

  • 2010年11月28日 20:51
  • 2KB
  • 下载

运用动态规划的石子规划问题

  • 2015年11月03日 19:42
  • 1KB
  • 下载

石子合并问题代码

  • 2013年05月31日 01:19
  • 1KB
  • 下载

石子合并问题

  • 2014年05月18日 21:08
  • 2KB
  • 下载

不能移动的石子合并问题(动态规划/C++实现)

  • 2012年10月29日 16:23
  • 2KB
  • 下载

算法实验代码 符号三角 士兵站队 钓鱼问题 石子合并等

  • 2009年08月07日 08:02
  • 9.77MB
  • 下载

动态规划法石子合并问题

  • 2013年10月12日 22:44
  • 2KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:石子问题
举报原因:
原因补充:

(最多只允许输入30个字)