您的位置:首页 > 其它

最小代价树

2011-05-14 23:38 113 查看
#include<iostream>
#include<algorithm>
using namespace std;
#define MAX 205
int stone[MAX];int n;
int f[MAX][MAX];
int getSum(int l,int r){
  int sum=0;
  for(int i=l;i<=r;++i){
    sum+=stone[i];
  }
  return sum;
}
int solve(){
  int v,i,j,k;
  for(i=0;i<n;++i){
    f[i][i]=0;
  }
  for(v=1;v<n;++v){
    for(i=0;i<n-v;++i){
      j=i+v;
      f[i][j]=999999999;
      for(k=i;k<j;++k){
        f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+getSum(i,j));
      }
    }
  }
  return f[0][n-1];
}

int main(int argc, char *argv[])
{
  cin>>n;
  for(int i=0;i<n;++i)cin>>stone[i];
  cout<<solve()<<endl;
  return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: