这题一看思路跟数塔,天上掉馅饼一样,从后面往前推,不断比较,更新,就ok了。。
发现自己的编程能力还有有待提高,思路那么明确,我编的速度真的有点慢,还出现了各种
错误,死循环等等等。。加油,努力提高编程努力。。。。
错误代码如下 :
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<debug.h>
int A[21][1001],flag2=0,a1=-2000;
int fun(int x ,int y)
{
return x>y? x:y;
}
int array(int x,int y)
{
flag2=fun(x,y);
if(flag2>a1)
a1=flag2;
return 0;
}
int main( )
{
int N,i,j,x,y,t,m,n,p,q,k,flag=0;
Debug();
scanf("%d",&N);
while(N--)
{
scanf("%d%d",&x,&y);
for(i=0;i<=x+1;i++)
for(j=0;j<=y+1;j++)
A[i][j]=-10000;
for(i=1;i<=x;i++)
for(j=1;j<=y;j++)
{
scanf("%d",&t);
A[i][j]=t;
}
for(i=x;i>=1;i--)
{
for(j=y;j>=1;j--)
{
if(i==x&&!flag)
j=y-1,flag=1;
for(k=1;k<=20;k++)
{
if(j*k<=y)
array(A[i][j*k+1],A[i+1][j]);
else
break;
}
A[i][j]+=a1;
//printf("%d %d %d\n",a1,k,A[i][j]);
a1=-2000;
//j--;
// printf("%d ",j);
//printf("******\n\n");
}
}
printf("%d\n",A[1][1]);
}
return 0;
}
#include<string.h>
#include<stdlib.h>
#include<debug.h>
int A[21][1001],flag2=0,a1=-2000;
int fun(int x ,int y)
{
return x>y? x:y;
}
int array(int x,int y)
{
flag2=fun(x,y);
if(flag2>a1)
a1=flag2;
return 0;
}
int main( )
{
int N,i,j,x,y,t,m,n,p,q,k,flag=0;
Debug();
scanf("%d",&N);
while(N--)
{
scanf("%d%d",&x,&y);
for(i=0;i<=x+1;i++)
for(j=0;j<=y+1;j++)
A[i][j]=-10000;
for(i=1;i<=x;i++)
for(j=1;j<=y;j++)
{
scanf("%d",&t);
A[i][j]=t;
}
for(i=x;i>=1;i--)
{
for(j=y;j>=1;j--)
{
if(i==x&&!flag)
j=y-1,flag=1;
for(k=1;k<=20;k++)
{
if(j*k<=y)
array(A[i][j*k+1],A[i+1][j]);
else
break;
}
A[i][j]+=a1;
//printf("%d %d %d\n",a1,k,A[i][j]);
a1=-2000;
//j--;
// printf("%d ",j);
//printf("******\n\n");
}
}
printf("%d\n",A[1][1]);
}
return 0;
}
犯的错误有:1)很多变量的定义应该放在while(N--)里面。。否则运行一次后就会出错。
2)题目意思没看清楚,只能走(x+1,y),(x,y+1),(x,y*k)k>=2的。
正确代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<debug.h>
int A[35][1015],flag2=0,a1=-1000;
int fun(int x ,int y)
{
return x>y? x:y;
}
int fun1(int x,int y,int z)
{
return fun(fun(x,y),z);
}
int array(int x,int y,int z)
{
flag2=fun1(x,y,z);
if(flag2>a1)
a1=flag2;
return 0;
}
int main( )
{
int N,i,j,x,y,t,m,n,p,q,k,flag;
Debug();
scanf("%d",&N);
while(N--)
{
flag=0;
flag2=0,a1=-1000;
scanf("%d%d",&x,&y);
for(i=0;i<=30;i++)
for(j=0;j<=1010;j++)
A[i][j]=-1000;
for(i=1;i<=x;i++)
for(j=1;j<=y;j++)
{
scanf("%d",&t);
A[i][j]=t;
}
for(i=x;i>=1;i--)
{
for(j=y;j>=1;j--)
{
if(i==x&&!flag)
j=y-1,flag=1;
array(A[i][j+1],A[i+1][j],-1000);
for(k=2;k<=1000;k++)
{
if(j*k<=y)
{
array(A[i][j+1],A[i+1][j],A[i][j*k]);
}
}
A[i][j]+=a1;
a1=-1000;
}
}
printf("%d\n",A[1][1]);
// printf("***");
//system("pause");
}
return 0;
}