| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2864 人关注过本帖
标题:最小代价子母树
取消只看楼主 加入收藏
无悔选择
Rank: 1
等 级:新手上路
威 望:1
帖 子:45
专家分:0
注 册:2005-12-25
收藏
 问题点数:0 回复次数:1 
最小代价子母树

1. 最小代价子母树

设有一排数,共n个,例如:22 14 7 13 26 15 11。任意2个相邻的数可以进行归并,归并的代价为该两个数的和,经过不断的归并,最后归为一堆,而全部归并代价的和称为总代价,给出一种归并算法,使总代价为最小。

输入、输出数据格式与“石子合并”相同。

Sample Input

4

12 5 16 4

Sample Output

-12 -5 16

17 -16 -4

-17 -20

37

搜索更多相关主题的帖子: 最小代价 子母 FONT Roman 
2006-04-08 15:17
无悔选择
Rank: 1
等 级:新手上路
威 望:1
帖 子:45
专家分:0
注 册:2005-12-25
收藏
得分:0 
#include<iostream.h>
void main()
{
int a[101];
int m[101][101];
int n,i,j,k,min;
cin>>n;
for(i=0;i<n;i++)
{
cin>>a[i];
}
for(i=0;i<n;n--)
{
for(j=0;j<n;j++)
{
m[j][j+1]=a[j]+a[j+1];
}
min=m[0][1];
for(j=0;j<n-1;j++)
{
if(min>m[j][j+1])
min=m[j][j+1];
}
for(j=0;j<n;j++)
{
if(min==m[j][j+1])
{
a[j]=-1*a[j];
a[j+1]=-1*a[j+1];
if(n==1)
{
cout<<-1*a[0]<<" ";
}
else
{
for(k=0;k<n;k++)
cout<<a[k]<<" ";
}
a[j]=min;
for(k=j+1;k<n;k++)
a[k]=a[k+1];
break;
}
}
cout<<endl;
for(j=0;j<n;j++)
{
m[j][j+1]=0;
}
}
}

2006-04-08 15:18
快速回复:最小代价子母树
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037689 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved