nyoj The Triangle 18 (简单DP)

来源:互联网 发布:java split用法 空格 编辑:程序博客网 时间:2024/05/22 10:32

The Triangle

时间限制:1000 ms  |           内存限制:65535 KB
难度:4
描述

7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
(Figure 1)
Figure 1 shows a number triangle. Write a program that calculates the highest sum of numbers passed on a route that starts at the top and ends somewhere on the base. Each step can go either diagonally down to the left or diagonally down to the right.

输入
Your program is to read from standard input. The first line contains one integer N: the number of rows in the triangle. The following N lines describe the data of the triangle. The number of rows in the triangle is > 1 but <= 100. The numbers in the triangle, all integers, are between 0 and 99.
输出
Your program is to write to standard output. The highest sum is written as an integer.
样例输入
573 88 1 0 2 7 4 44 5 2 6 5
样例输出
30
//题意://给你一个n行的数塔,问从第一行走到最后一行最多要花销多少能量//并且上一行只能与它下一行的相邻的两个数相加//解题思路://从下往上加,然后不断更新他们的值 #include<stdio.h>#define MAX(a,b) (a>b?a:b)int a[110][110];int main(){int n,i,j;while(scanf("%d",&n)!=EOF){for(i=1;i<=n;i++){for(j=1;j<=i;j++){scanf("%d",&a[i][j]);}}for(i=n-1;i>=1;i--){for(j=1;j<=i;j++){a[i][j]=MAX(a[i][j]+a[i+1][j],a[i][j]+a[i+1][j+1]);}}printf("%d\n",a[1][1]);}return 0;}

0 0