动态规划——数塔问题

从原点(顶层)出发,只能向左或者向右,找到一条路径使得路径上的数字和最大:
在这里插入图片描述

#include<stdio.h>
//#include"algorithm.h"
#define N 100

int max(int a, int b)
{
	return a > b ? a : b;
}

int main()
{
	int a[N][N], i, j;
	int n = 5;
	//scanf("%d", &n);

	for (i = 0; i < n; i++)
	{
		for (j = 0; j <= i; j++)
		{
			scanf("%d", &a[i][j]);
		}
	}

	//上塔
	printf("坐标:\n");
	for (i = n - 2; i >= 0; i--)
	{
		for (j = i; j >= 0; j--)
		{
			a[i][j] += max(a[i + 1][j], a[i + 1][j + 1]);//当前值加上子级中的较大值
			printf("%d %d	%d\n", i + 1, j + 1, a[i][j]);
		}
		printf("\n");
	}
}

在这里插入图片描述