C语言编写:动态规划求最优二叉树

本文通过一个具体的有序集合示例,介绍了如何使用C语言实现算法的过程。包括了初始化数组、计算主对角线及非主对角线上的w、c、r值,并展示了最终的计算结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法举例:

  有五个元素的有序集合A={a1,a2,a3,a4,a5},q0=0.05,q1=0.1,q2=q3=q4=0.05,q5=0.1,p1=0.15,p2=0.1,p3=0.05,p4=0.1,p5=0.2,为方便起见,p和q都乘以100;

#include<stdio.h>
#define max 6
void main()
{
	int i,j,k,Big,w[max][max],c[max][max],r[max][max];
	int q[max]={5,10,5,5,5,10},p[max]={0,15,10,5,10,20};
	printf("二维数组为:\n");
	//求主对角线即i=j时的w,c,r的二维数组。
	for(i=0;i<6;i++)
		{ 
			j=i;
			w[i][j]=q[i];
			c[i][j]=r[i][j]=0;
		}
	//求除主对角线外的w的二维数组
   for(i=0;i<6;i++)
	   for(j=i+1;j<6;j++)
		   w[i][j]=q[j]+p[j]+w[i][j-1];   
   //求除主对角线外的c与r的二维数组
   for(i=4;i>=0;i--)	  
	   for(j=i+1;j<=5;j++)
	   {   
		   Big=100000;
		   for(k=i+1;k<=j;k++)
			   if(c[i][k-1]+c[k][j]<Big) 
			   {
				   Big=c[i][k-1]+c[k][j];
				   r[i][j]=k;
			   }
		   c[i][j]=Big+w[i][j];
	   }
//输出结果
for(i=0;i<6;i++)
   {
	   for(j=i;j<6;j++)
		   printf("(%d,%d,%d)",w[i][j],c[i][j],r[i][j]);
	   printf("\n");
   }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值