#include <iostream>
using namespace std;
#define IMAX -100000000
#define NSIZ 1010
int dp[25][NSIZ]; //dp[i][j] 表示从(1,1)到(i,j)处最大能量值
int arr[25][NSIZ];
int main()
{
int t, i, j,n, m, k;
scanf("%d", &t);
while(t--)
{
scanf("%d %d", &n, &m);
for(i = 1;i <= n; ++i)
{
for(j = 1; j <= m; ++j)
{
scanf("%d", &arr[i][j]);
dp[i][j]= IMAX;
}
}
dp[1][1] = arr[1][1]; //初始化
for(i = 1;i <= n; ++i)
{
for(j = 1;j <= m;j++ )
{
if(i >= 2)
{
dp[i][j] = max(dp[i][j], dp[i-1][j] + arr[i][j]);
}
if(j >= 2)
{
dp[i][j] = max(dp[i][j], dp[i][j-1] + arr[i][j]);
}
for(k = j - 2; k > 0; k--) //从第一列开始,满足k是j的因子,也就是列的倍数
{
if(j % k == 0)
{
dp[i][j] = max(dp[i][j], dp[i][k] + arr[i][j]);
}
}
}
}
printf("%d\n", dp[n][m]);
}
return 0;
}
hdu2571命运【动态规划】
最新推荐文章于 2020-04-30 21:35:44 发布