递归 栈溢出问题
#include <iostream>using namespace std;
int pisa[100001][11];
int sum[100001][11];
int T;
int maxSum(int a, int b, int c)
{
int max(0);
if (a>max)
max=a;
if (b>max)
max=b;
if (c>max)
max=c;
return max;
}
int mypisa(int r, int j)
{
if (r==T)
return sum[r][j];
if (j==0)
{
if (sum[r+1][j]==-1)
sum[r+1][j]=mypisa(r+1,j);
if (sum[r+1][j+1]==-1)
sum[r+1][j+1]=mypisa(r+1,j+1);
if (sum[r+1][j] > sum[r+1][j+1])
return sum[r+1][j] + pisa[r][j];
return sum[r+1][j+1] + pisa[r][j];
}
else if (j==10)
{
if (sum[r+1][j]==-1)
sum[r+1][j]=mypisa(r+1,j);
if (sum[r+1][j-1]==-1)
sum[r+1][j-1]=mypisa(r+1,j-1);
if (sum[r+1][j] > sum[r+1][j-1])
return sum[r+1][j] + pisa[r][j];
return sum[r+1][j-1] + pisa[r][j];
}
else
{
if (sum[r+1][j-1]==-1)
sum[r+1][j-1]=mypisa(r+1,j-1);
if (sum[r+1][j]==-1)
sum[r+1][j]=mypisa(r+1,j);
if (sum[r+1][j+1]==-1)
sum[r+1][j+1]=mypisa(r+1,j+1);
return
maxSum(sum[r+1][j-1],sum[r+1][j],sum[r+1][j+1])
+ pisa[r][j];
}
}
int main()
{
int x, t, n;
while (cin>>n && n!=0)
{
memset(sum,-1,sizeof(sum));
memset(pisa,0,sizeof(pisa));
T=0;
for (int i=0; i<n; i++)
{
cin >>x>>t;
pisa[t][x]++;
if (t>T)
T=t;
}
for (i=0; i<=10; i++)
sum[T][i]=pisa[T][i];
cout <<mypisa(0,5)<<endl;
}
return 0;
}
这是杭电acm免费馅饼问题,
输入
1
1 10000
结果正确
输入
1
1 20000
就会出错。提交结果是栈溢出,请高手帮忙!谢谢!