The Triangle
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 32266 | Accepted: 19083 |
Description
7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (Figure 1)
Input
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.
Output
Your program is to write to standard output. The highest sum is written as an integer.
Sample Input
5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
Sample Output
30
Source
最近要紧急学习动态规划,就打算从头学起,于是就有了这最最简单,最最基础的这道题,体现了最基础的动态规划思想,动态规划里的状态和状态转移是重点,这一题就开了一个好头,希望大家很快理解。本人也是菜鸟呃,感谢凤娇大神,希望有大神能不吝赐教,找找我的错误,不胜感激!
#include<stdio.h>
#include<string.h>
unsigned max(unsigned a,unsigned b)
{
return (a>b)?a:b;
};
int main()
{
unsigned int num[101][101],n;
int i,j;
memset(num,0,sizeof(num));
long ans = 0;
scanf("%u",&n);
for(i=0;i<n;i++)
for(j=0;j<i+1;j++)
scanf("%u",&num[i][j]);
for(i = n-2;i>=0;i--){
for(j = 0;j<=i;j++){
num[i][j] += max(num[i+1][j],num[i+1][j+1]) ;
}
}
ans = num[0][0];
printf("%ld",ans);
return 0;
}