点击打开链接
算是DP模板题
之前遇到过类似的题 被坑的很惨 今日重逢AC留念
方程: dp[i][j]=max{dp[i-1][j],dp[i][j-1],dp[i][k]} (j是k的整数倍,k*n=j,n=1,2,3...)
int judge(int u,int v)
{
if(u>v) return u;
else return v;
}
int main()
{
int e[21][1001];
int t,n,m,tem,i,j,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",&e[i][j]);
}
}
for(i=0;i<=n;i++)
{
e[i][0]=-N;
}
for(i=0;i<=m;i++)
{
e[0][i]=-N;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(i==1&&j==1) continue;
tem=e[i][j]+judge(e[i-1][j],e[i][j-1]);
k=2;
while(j/k>=1)
{
if(j%k==0)
{
if(e[i][j]+e[i][j/k]>tem)
{
tem=e[i][j]+e[i][j/k];
}
}
k++;
}
e[i][j]=tem;
}
}
printf("%d\n",e[n][m]);
}
return 0;
}