P1216数字三角形 Number Triangles

菜题 P1216数字三角形 Number Triangles

简介

很简单的一道dp练手题,,,
他不是简不简单的问题,

他真的是那种,很少见的那种

题目(from 洛谷)

题目描述
观察下面的数字金字塔。

写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

上思路

** 显 然 **
状态转移:

f[i][j]=max(f[i+1][j],f[i+1][j+1])+a[i][j]

f即为到达i j格用最短长度 a即为每格子中数值
注意递推的顺序

上代码

#include <bits/stdc++.h>
#define N 1010
using namespace std;
int a[N][N],f[N][N],x;
int main(){
	cin>>x;
	for(int i=1;i<=x;i++)
		for(int j=1;j<=i;j++)
			cin>>a[i][j];
	for(int i=x;i>=1;i--){
		for(int j=i;j>=1;j--){
			f[i][j]=max(f[i+1][j],f[i+1][j+1])+a[i][j];
		}
	}
	cout<<f[1][1]<<endl;
	return 0;
}
原文地址:https://www.cnblogs.com/tushukai/p/14002604.html