石子问题

原创 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;
}

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

相关文章推荐

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

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

石子合并问题代码

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

CCF 压缩编码(石子合并问题)

#include #include #include #include #include #include #include #include #include #include using name...

石子合并问题

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

石子合并问题矩阵相乘

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

石子合并问题(动态规划)

试题信息       在一个园形操场的四周摆放N堆石子(N≤100),现要将石子有次序地合并成一堆。规定       每次只能选相邻的两堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。...

ACM DP 石子合并问题

滴,集训第二十一天打卡。 可能是对组队不太满意,都不大高兴做新的训练... 所以最近一直在磨DP,翻一下博客,发现最近都是DP啊......

动态规划法石子合并问题

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

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