问题如下
考虑下面显示的数字三角形。编写一个程序,计算可以在从顶部开始到底部某处结束的路线上传递的最大数字总和。每一步都可以对角线向左或向右对角线向下。
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
在上面的示例中,路由7 -> 3 -> 8 -> 7 -> 5
产生的总和最高:30。
我有以下错误
Execution error: Your program (`numtri') used more than the
allotted runtime of 1 seconds (it ended or was stopped at 1.674
seconds) when presented with test case 6. It used 6080 KB of
memory.
我的程序适用于输入 <=8 三角形大小。但是,当三角形大小超过 8 时,它会失败。我不知道为什么会这样。请帮忙。
这是我的代码:
#define MAX 1000
int max=0,a[MAX][MAX];
void dfs(int i,int j,int end,int sum)
{
if(i<=end)
{
sum += a[i][j];
dfs(i+1,j,end,sum);
dfs(i+1,j+1,end,sum);
}
else
{
if(sum>max)
max = sum;
}
}
int main () {
FILE *fin = fopen ("numtri.in", "r");
FILE *fout = fopen ("numtri.out", "w");
int r,i,j;
fscanf(fin,"%d",&r);
for(i = 1;i<=r;i++)
for(j = 1;j<=i;j++)
fscanf(fin,"%d",&a[i][j]);
dfs(1,1,r,0);
fprintf(fout,"%d\n",max);
fclose(fin);
fclose(fout);
return 0;
}
它适用于前 5 个测试用例,但在具有 199 个三角形大小的第 6 个测试用例中失败。