【发布时间】:2015-03-19 23:31:28
【问题描述】:
我正在尝试解决动态编程问题,我需要以二维数组的形式获取用户输入,并在函数内部使用二维数组中的值。 二维数组的值在函数内部使用时不会改变。
在函数 int dp 中,我得到了 错误:
将“a”声明为多维数组必须对除第一个维度之外的所有维度都有边界
int max(int a,int b,int c)
{
if(a>=b && a>=c)return a;
if(b>=c && b>=a)return b;
else return c;
}
int max2(int a,int b)
{
if(a>b)return a;
else return b;
}
int dp(int i,int j,int a[][],int p,int q)
{
if((i-1)>=0 && (j-1)>=0 &&(i+1)<p &&(j+1)<q )
return max(a[i][j]+dp(i-1,j+1,a,p,q),a[i][j]+dp(i+1,j+1,p,q),
a[i][j]+dp(i,j+1,p,q));
if(i==0 && j!=0 && (j+1)<q)
return max2(a[i][j]+dp(i+1,j+1,p,q),a[i][j]+dp(i,j+1,p,q));
}
int main()
{
int p,q,r,s,T,a,b,i,j,k;
scanf("%d",&T);
for(a=0;a<T;a++)
{
scanf("%d %d",p,q);
int z[p][q];
int max=0;
for(i=0;i<q;i++)
{
for(j=0;j<p-1;j++)
scanf("%d ",&z[j][i]);
scanf("%d",&z[j+1][i]);
}
for(i=0;i<p;i++)
{
if(dp(i,0,z,p,q)>max)
max=dp(i,0,z,p,q);
}
}
}
【问题讨论】:
-
1) 变量名使用多个字母。 2) 如果这是 C++,那么为什么不使用标准容器,例如
std::vector?
标签: c++ arrays recursion multidimensional-array dynamic-programming