洛谷 P1216 [USACO1.5] [IOI1994]数字三角形题解

观察题目我们发现从前往后推会有条件判断,不容易写出来。所以就从后往前推。

洛谷 P1216 [USACO1.5] [IOI1994]数字三角形题解_第1张图片

也就是说后面的状态已经是推出来了,保证是最大值。

//数字三角形
#include
using namespace std;
const int N = 510;
int f[N][N], n;

int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	cin >> n;
	//初始化
	for (int i = 1; i <= n; ++i)
		for (int j = 1; j <= i; ++j) cin >> f[i][j];
	//从最后一层往前递推
	for (int i = n - 1; i; --i)
		for (int j = 1; j <= i; ++j) f[i][j] += max(f[i + 1][j], f[i + 1][j + 1]);
	cout << f[1][1];
	return 0;
}

最后输出的答案就是第一层所在的位置。

你可能感兴趣的:(算法,c++)