#include<stdio.h>
#define MAX 15
int table[MAX][MAX], nlayer, nsum;
int path[MAX];
int sum()
{
int i, sum = 0;
for (i = 0; i < nlayer; i++)
sum += path[i];
return sum;
}
void show()
{
int i;
printf("Path : ");
for (i = 0; i < nlayer; i++)
printf("%-5d", path[i]);
printf("/n");
}
void dfs(int layer, int pos)
{
path[layer] = table[layer][pos];
if (layer == nlayer-1) {
if (sum() == nsum)
show();
} else {
dfs(layer+1, pos);
dfs(layer+1, pos+1);
}
}
int main()
{
int i, j;
while (1) {
// layer
scanf("%d", &nlayer);
if (nlayer == 0)
break;
// number tower
for (i = 0; i < nlayer; i++) {
for (j = 0; j <= i; j++) {
scanf("%d", &table[i][j]);
}
}
// sum
scanf("%d", &nsum);
// dfs , check every path
dfs(0, 0);
}
return 0;
}
#include<stdio.h>
#define MAX 15
int table[MAX][MAX], nlayer;
int maxsum[MAX][MAX];
int max(int a, int b)
{
if (a >= b)
return a;
else
return b;
}
int main()
{
int i, j, r;
while (1) {
// layer
scanf("%d", &nlayer);
if (nlayer == 0)
break;
// number tower
for (i = 0; i < nlayer; i++) {
for (j = 0; j <= i; j++) {
scanf("%d", &table[i][j]);
}
}
// dp
maxsum[0][0] = table[0][0];
for (i = 1; i < nlayer; i++) {
maxsum[i][0] = maxsum[i-1][0] + table[i][0];
for (j = 1; j < i; j++) {
maxsum[i][j] = max(maxsum[i-1][j-1], maxsum[i-1][j]) + table[i][j];
}
maxsum[i][j] = maxsum[i-1][j-1] + table[i][j];
}
// show
r = 0;
for (i = 0; i < nlayer; i++) {
if (maxsum[nlayer-1][i] > r)
r = maxsum[nlayer-1][i];
}
printf("The max num is %d./n", r);
}
return 0;
}