dp【i】【j】=max{dp【i】【j-1】,dp【i-1】【j】};点击打开链接
#include <iostream>
#define N 25
#define M 1005
#define inf -0x3f3f3f3f
using namespace std;
int mx(int x,int y) {return x>y?x:y;}
int main ()
{
//freopen("a.txt","r",stdin);
int i,j,k,t,n,m,te,f[N][M];
cin>>t;
while(t--)
{
cin>>n>>m;
memset(f,0,sizeof(f));
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
cin>>f[i][j];
for(i=1;i<=n;i++) f[i][1]+=f[i-1][1];
for(i=1;i<=n;i++)
{
for(j=2;j<=m;j++)
{
te=inf;
if(i==1) te=f[i][j-1];
else te=mx(f[i-1][j],f[i][j-1]);
for(k=1;k<j;k++)
if(j%k==0) te=mx(te,f[i][k]);
f[i][j]=te+f[i][j];
}
}
cout<<f[n][m]<<endl;
}
return 0;
}