Language:DefaultEspañol
The Triangle
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<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int d[110][110];//存数据
int maxsum[110][110];//记录走的步数的值
int n;//行数
int dfs(int i,int j)//表示从i,j到最低边的最大值
{
if(maxsum[i][j]!=-1)//如果走过了就返回
return maxsum[i][j];
if(i==n)//如果在最后一行
maxsum[i][j]=d[i][j];//返回它本身
else
{
int x=dfs(i+1,j);//往下走
int y=dfs(i+1,j+1);//往右下走
maxsum[i][j]=max(x,y)+d[i][j];//保证最大值
}
return maxsum[i][j];//返回步数的值
}
int main()
{
while(cin>>n)//输入行数
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
cin>>d[i][j];//输入地图
}
}
memset(maxsum,-1,sizeof(maxsum));//初始化,表示都没走过
cout<<dfs(1,1)<<endl;//从最上面开始到底端的最大值
}
return 0;
}