#include <STDIO.H> |
#include <STDLIB.H> |
#define INF 1000000 |
#define MAXNUM 100 |
int n; //沙子的堆数 |
int Num[MAXNUM]; //每堆沙子的数量 |
int F[MAXNUM][MAXNUM]; //过程函数 |
int G[MAXNUM][MAXNUM]; |
int fnMin( int , int ); |
//返回两个数的最小值 |
int main() |
{ |
int i,j,k,m,L,t; |
printf ( "输入沙堆的堆数n(1-100):\n" ); |
scanf ( "%d" ,&n); |
printf ( "输入每堆中沙子的个数:\n" ); |
for (i=1; i<=n; i++) |
{ |
scanf ( "%d" ,&Num[i]); |
G[i][i]=Num[i]; |
F[i][i]=0; |
} |
for (m=n-1;m>=1;m--) |
{ |
for (i=1;i<=m;i++) |
{ |
L=n-m+1; |
j=i+L-1; |
for (k=i;k<=j;k++) |
{ |
G[i][j]=G[i][j]+G[k][k]; |
} |
F[i][j]=INF; |
for (k=i;k<=j-1;k++) |
{ |
t=F[i][k]+F[k+1][j]+G[i][j]; |
if (t<F[i][j]) |
{ |
F[i][j]=t; |
} |
} |
} |
} |
printf ( "最小代价:%d\n" ,F[1][n]); |
return 0; |
} |
初级程序员
by: 云代码会员 发表于:2015-06-19 15:23:24 顶(0) | 踩(0) 回复
不错
回复评论