#define F 100
#define V 100
/**//*
插花问题描述:
将f束鲜花插入v个花瓶中,使达到最徍的视觉效果,
问题相关约定及插花要求:
鲜花被编号为1--f,花瓶被编号为1--v,花瓶按从小到
大顺序排列,一只花瓶只能插一支花,鲜花i插入花瓶j中的
视觉效果效果值已知,编号小的鲜花所放入的花瓶编号也小
问题求解思路:
花瓶j(1 (B) ? (A)
B))//求取两数的最大值宏定义
#define F 100
//鲜花数最大值常量定义
#define V 100
//花瓶数最大值常量定义
//“插花问题”的初始化函数
//intf,v:鲜花数量,花瓶个数
//intp[][v]:鲜花i插入花瓶j的好看程度
void Flower_Initialize(int *f,int *v,int p[][V])
...{
int i,j;
printf("输入鲜花数量及花瓶个数:"
;
scanf("%d%d",f,v);
printf("顺序输入各鲜花插入各花瓶的好看程度: "
;
for(i=1;i 0;i--)
...{
while(q[i-1][newv-1]+p[newv] < q[newv])
newv--;
//确定鲜花i插在花瓶newv中,并准备考虑前一只花瓶
way = newv--;
}
return(q[f][v]);
}
//测试“插花问题”的动态规划法函数
voidRun_Ikebana()
...{
//循环计数器,鲜花数量,花瓶个数,鲜花i插入花瓶j的好看程度,鲜花插入花瓶的插入方法结果
inti,f,v,p[F][V],way[F];
Flower_Initialize(&f,&v,p);
printf("最大好看程度点数为%d ",Ikebana(p,f,v,way));
printf("插有鲜花的花瓶是: "
;
for(i = 1;i <= f;i++)
printf("%4d",way);
}
//:============================“插花问题”的动态规划法算法============================
int main(int argc, char* argv[])
...{
//Run_SubString();
Run_Ikebana();
printf(" 应用程序运行结束! "
;
return 0; |