sdibt 1251 进化树问题
/*
三个点的话 A--D--B
|
C
dis(AD)=(AB+AC-BC)/2;
拓展到到n个点
每次去叶子节点,先去掉与A相连长度最小的。
将他们的长度加起来。
*/
#include<stdio.h>
#define N 110
int ma[N][N];
int main() {
int n,m,i,j,k,minn,f;
while(scanf("%d",&n)!=EOF) {
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++){
scanf("%d",&ma[i][j]);
ma[j][i]=ma[i][j];
}
minn=-1;
m=0;
for(i=1;i<=n-2;i++) {
j=i+1;
minn=-1;
for(k=j+1;j<=n;j++) {
f=(ma[i][j]+ma[i][k]-ma[j][k])/2;
if(minn<0||f<minn)minn=f;
}
m+=minn;
}
m+=ma[n-1][n];
printf("%d\n",m);
}
return 0;}
浙公网安备 33010602011771号