#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int d[1000][1000];
int N;
int max( int a, int b )
{
return a > b ? a: b;
}
int main()
{
scanf( "%d", &N );
memset( d, 0, sizeof(d) );
for( int i = 1; i <= N; i++ )
{
for( int j = 1; j <= i; j++ )
scanf( "%d", &d[i][j] );
}
for( int i = N; i >= 1; i-- )
{
for( int j = 1; j <= i; j++ )
d[i-1][j] += max( d[i][j], d[i][j+1] );
}
printf( "%d\n", d[1][1] );
return 0;
}NYOJ 18 动态规划入门
最新推荐文章于 2018-05-09 23:16:03 发布
本文介绍了一个使用动态规划解决的经典问题:给定一个数字填充的三角形,如何找出从顶部到底部的路径使得经过的数字之和最大。通过逆向思维,从底部向上更新每个节点的最大累积值,最终找到顶点的最大路径和。
956

被折叠的 条评论
为什么被折叠?



