题目
给定一个具有 N 层的数字三角形,从顶至底有多条路径,每一步可沿左斜线向下或沿右斜线向下,路径所经过的数字之和为路径得分,请求出最大路径得分。
输入
1
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
输出
30
代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main ()
{
int x,m,number[m+1][m+1];
memset(number,0,sizeof(number));
cin>>x;
while(x--)
{
cin>>m;
for(int i=1;i<=m;i++)
for(int j=1;j<=i;j++)
cin>>number[i][j];
for(int i=m-1;i>=1;i--)
for(int j=1;j<=i;j++)
number[i][j]+=max(number[i+1][j],number[i+1][j+1]);
cout<<number[1][1]<<endl;
}
return 0;
}
看着好像挺对的,但是,Runtime Error(ACCESS_VIOLATION)。
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main ()
{
int x,m,number[170][170];
cin>>x;
while(x--)
{
cin>>m;
memset(number,0,sizeof(number));
for(int i=1;i<=m;i++)
for(int j=1;j<=i;j++)
cin>>number[i][j];
for(int i=m-1;i>=1;i--)
for(int j=1;j<=i;j++)
number[i][j]+=max(number[i+1][j],number[i+1][j+1]);
cout<<number[1][1]<<endl;
}
return 0;
}