分析:此问题可以从最后一个元素出发,
a[i][j]+a[i-1][j] > a[i][j]+a[i][j-1] ?a[i][j]+a[i-1][j] : a[i][j] + a[i][j-1]
然后把i,j坐标换位 i-1,j或者 i,j-1;依次进行上述循环,直至到i == 0或者j == 0,再将最后一行元素统加起来即可。
附上代码:
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
void fun(int a[100][100],int m,int n,int max)
{
int i=m,j=n;
if(i==0)
{
while(j!=0)
{
j--;
max += a[i][j];
}
printf("%d",max);
}else if(j==0)
{
while(i!=0)
{
i--;
max+= a[i][j];
}
printf("%d",max);
}else
{
if(max+a[i][j-1] > max + a[i-1][j])
{
max +=a[i][j-1];
fun(a,i,j-1,max);
}else
{
max += a[i-1][j];
printf("max = %d\n",max);
fun(a,i-1,j,max);
}
}
}
int main()
{
int m,n,i,j;
int a[100][100];
printf("请输入m和n的值:\n");
scanf("%d%d",&m,&n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
int max = a[m-1][n-1];
fun(a,m-1,n-1,max);
return 0;
}