AC代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
#define MIN -100000000
int main(){
int T;
int N, M;
int num[22][1010];
int dp[1010];
cin >> T;
while( T-- ){
cin >> N >> M;
for( int i = 1; i <= N; i++ ){
for( int j = 1; j <= M; j++ ){
cin >> num[i][j];
}
}
memset( dp, -1, sizeof( dp ) );
for( int i = 1; i <= N; i++ ){
for( int j = 1; j <= M; j++ ){
int temp;
if( i == 1 && j == 1 ){
continue;
}
if( i == 1 ){
temp = num[i][j-1];
}else if( j == 1) {
temp = num[i-1][j];
}else{
temp = max( num[i][j-1], num[i-1][j] );
}
for( int k = 2; k <= j; k++ ){
if( j % k == 0 ){
temp = max( temp, num[i][j/k] );
}
}
num[i][j] += temp;
}
}
cout << num[N][M] << endl;
}
return 0;
}