void print_optimal(int s[][6], int i, int j)
{
	if (i == j)
	{
		printf("A%d", i);
	}
	else
	{
		printf("(");
		print_optimal(s, i, s[i][j]-1);
		print_optimal(s, s[i][j], j);
		printf(")");
	}
}
void matrix_chain_order(int *p, int n)
{
	int i, j, k, l, q;
	int m[6][6];
	int s[6][6];
	for(i=0;i<6;i++)
		for(j=0;j<6;j++)
			m[i][j]=0;
	for(i=0;i<6;i++)
		for(j=0;j<6;j++)
			s[i][j]=0;

	for (i = 0; i < n; i++)
	{
		m[i][i] = 0;
	}
	for (l = 2; l <= n; l++)
	{
		for (i = 0; i < n-l+1; i++)
		{
			j = i+l-1;
			m[i][j] = 99999;
			for (k = i; k < j; k++)
			{
				q = m[i][k] + m[k+1][j] + p[i]*p[k+1]*p[j+1];
				if (q < m[i][j])
				{
					m[i][j] = q;
					s[i][j] = k+1;
				}
			}
		}
	}

	printf("------ m ------\n");
	for(i = 0; i < 6; i++)
	{
		for(j = 0; j < 6; j++)
		{
			printf("%d\t", m[i][j]);
		}
		printf("\n");
	}
	printf("------ s ------\n");
	for(i = 0; i < 6; i++)
	{
		for(j = 0; j < 6; j++)
		{
			printf("%d\t", s[i][j]);
		}
		printf("\n");
	}
	printf("------ output ------\n");
	print_optimal(s, 0, 5);
	printf("\n");
}
Exemple #3
0
int main(int argc, char *argv[])
{
	int i, no_items, max_weight, max_val;
	int weight[10], value[10];
	scanf("%d %d", &no_items, &max_weight);
	for (i = 1; i <= no_items; i++) {
		scanf("%d %d", &weight[i], &value[i]);
	}
	
/*
	printf("The values are: \nno_items: %d\t\
max_weight: %d\n", no_items, max_weight);
	for (i = 1; i <= no_items; i++) {
		printf("%d %d\n", weight[i], value[i]);
	}
*/
	max_val = compute_max_val(weight, value, no_items, max_weight);
	printf("The maximum value is: %d\n", max_val);
	print_optimal(weight, no_items, max_weight);
}