WA了n次...主要是因为这个题有个 倍数关系,所以dp数组从1开始更好一些...我也没有改...
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
using namespace std;
int data[25][1005];
int temp[25][1005];
int main()
{
int n,m;
int t;
while(cin>>t)
{
while(t--)
{
cin>>n>>m;
memset(temp,-99999999,sizeof(temp));
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
scanf("%d",&data[i][j]);
}
}
temp[0][0]=data[0][0];
for(int i=1; i<n; i++)
{
temp[i][0]=temp[i-1][0]+data[i][0];
}
for(int i=1; i<m; i++)
{
temp[0][i]=temp[0][i-1];
for(int j=0; j<=i; j++)
{
if((i+1)%(j+1)==0) temp[0][i]=max(temp[0][i],temp[0][j]);
}
temp[0][i]+=data[0][i];
}
for(int i=1; i<n; i++)
{
for(int j=1; j<m; j++)
{
temp[i][j]=max(temp[i][j-1],temp[i-1][j]);
for(int k=0; k<=j; k++)
{
if((j+1)%(k+1)==0)
temp[i][j]=max(temp[i][j],temp[i][k]);
}
temp[i][j]+=data[i][j];
}
}
cout<<temp[n-1][m-1]<<endl;
}
}
return 0;
}