动态规划完成数塔:
// 数塔.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdio.h>
#define N 5
int a[N][N];
int data[N][N];
int dir[N][N];
int main(int argc, char** argv) {
int i, j, left, right;
for (i = 0; i<N; i++) //init
{
for (j = 0; j<N; j++)
{
a[i][j] = 0;
data[i][j] = 0;
dir[i][j] = 0;
}
}
for (i = 0; i<N; ++i)//input a[N][N]
{
for (j = 0; j <= i; ++j)
{
scanf_s("%d", &a[i][j]);
}
}
for (i = N - 1; i >= 0; --i)//from the bottle to the top,dir[][] record the path
{
for (j = 0; j <= N - 1; ++j)
{
if (i == N - 1) {
data[i][j] = a[i][j];
}
else {
left = data[i + 1][j];
right = data[i + 1][j + 1];
if (left>right) {
data[i][j] = left + a[i][j];
dir[i][j] = 1;// 1 represent go to left,thereby 2 represent go to right
}
else {
data[i][j] = right + a[i][j];
dir[i][j] = 2;
}
}
}
}
printf("The numbers-town's max number is :%d\n", data[0][0]);
printf("The path is:\n");
i = 0;
j = 0;
while (i<N - 1) {
if (i == 0) {
printf("%d\n", a[i][j]);
}
if (dir[i][j] == 1) {
printf("%d\n", a[i + 1][j]);
i++;
}
else if (dir[i][j] == 2) {
printf(" %d\n", a[i + 1][j + 1]);
i++;
j++;
}
else;
}
return 0;
}