#include<stdio.h>
#define LENGTH 7
int main(void) {
double p[8] = { 0, 0.04,0.06,0.08,0.02,0.10,0.12,0.14 };
double q[8] = { 0.06,0.06,0.06,0.06,0.05,0.05,0.05,0.05 };
double e[LENGTH + 2][LENGTH + 1] = { 0 };
double w[LENGTH + 2][LENGTH + 1] = { 0 };
int root[LENGTH + 1][LENGTH + 1] = { 0 };
for (int i = 1; i <= LENGTH + 1; i++)
{
e[i][i - 1] = q[i - 1];
w[i][i - 1] = q[i - 1];
}
for (int l = 1; l <= LENGTH; l++)
{
for (int i = 1; i <= LENGTH - l + 1; i++)
{
int j = i + l - 1;
e[i][j] = 1000;
w[i][j] = w[i][j - 1] + p[j] + q[j];
for (int r = i; r <= j; r++)
{
double t = e[i][r - 1] + e[r + 1][j] + w[i][j];
if (t < e[i][j]) {
e[i][j] = t;
root[i][j] = r;
}
}
}
}
printf("e:\n");
for (int i = 1; i <= LENGTH + 1; i++)
{
for (int j = 0; j <= LENGTH; j++)
{
printf("%f\t", e[i][j]);
}
printf("\n");
}
printf("w:\n");
for (int i = 1; i <= LENGTH + 1; i++)
{
for (int j = 0; j <= LENGTH; j++)
{
printf("%f\t", w[i][j]);
}
printf("\n");
}
printf("root:\n");
for (int i = 1; i <= LENGTH; i++)
{
for (int j = 1; j <= LENGTH; j++)
{
printf("%d\t", root[i][j]);
}
printf("\n");
}
}