题目描述
来源
http://www.tyvj.cn:8080/Problem_Show.asp?id=1044
背景
09年 USACO 11月月赛 铜牌第一道
输入格式
第一行为N,表示有N行
后面N行表示三角形每条路的路径权
描述
示出了一个数字三角形。 请编一个程序计算从顶至底的某处的一条路径,使该路径所经过的数字的总和最大。每一步可沿左斜线向下或右斜线向下走;1<三角形行数<25;三角形中的数字为整数<1000;
输出格式
路径所经过的数字的总和最大的答案
解答
思路
用ans[i][j]表示到第(i,j)坐标的最大的结果,则ans[i][j]=max(ans[i-1][j],ans[i-1][j-1])+num[i][j];
代码
#include <iostream>
#include <memory.h>
using namespace std;
int **num;
int **ans;
int n;
int main() {
cin >> n;
num = new int *[n + 1];
ans = new int *[n + 1];
for (int i = 0; i <= n; i++) {
ans[i] = new int[n