1 #include<stdio.h>
2 long long int a[25][1005],sum[25][1005];
3 long long int max(long long int x,long long int y)
4 {
5 if(x>y) return x;
6 else return y;
7 }
8 //比较两个数的大小并返回大的数
9 int main()
10 {
11 int i,j,k,l,n,m,t,u;
12 scanf("%d",&t);
13 for(u=0;u<t;u++)
14 {
15 scanf("%d%d",&n,&m);
16 for(i=1;i<=n;i++)
17 {
18 for(j=1;j<=m;j++)
19 {
20 scanf("%lld",&a[i][j]);
21 sum[i][j]=-99999999;
22 }
23 }
24 sum[1][1]=a[1][1];
25 for(i=1;i<=n;i++)
26 {
27 for(j=1;j<=m;j++)
28 {
29 l=2*j;
30 while(l<=m)
31 {
32 sum[i][l]=max(sum[i][l],sum[i][j]+a[i][l]);
33 l=l+j;
34 }
35 //更新这个格子能更新的同为i行的格子
36 if(j<m) sum[i][j+1]=max(sum[i][j+1],sum[i][j]+a[i][j+1]);
37 //更新这个格子的右边一个格子
38 if(i<n) sum[i+1][j]=max(sum[i+1][j],sum[i][j]+a[i+1][j]);
39 //更新这个格子的下面一个格子
40 }
41 }
42 printf("%lld\n",sum[n][m]);
43 }
44 }
45 //注意负值情况,sum初始化时应该初始为极大的负数;