Problem solving: the legend... Multi-process DP. Run the Tle code first...
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <vector> 6 #include <climits> 7 #include <algorithm> 8 #include <cmath> 9 #define LL long long10 using namespace std;11 int t[51][51],dp[51][51][51][51];12 int main() {13 int ks,i,j,r,c,ii,jj,temp;14 scanf("%d",&ks);15 while(ks--) {16 scanf("%d %d",&r,&c);17 memset(dp,0,sizeof(dp));18 for(i = 1; i <= r; i++) {19 for(j = 1; j <= c; j++) {20 scanf("%d",t[i]+j);21 }22 }23 for(i = 1; i <= r; i++) {24 for(ii = 1; ii <= r; ii++) {25 for(j = 1; j <= c; j++) {26 for(jj = 1; jj <= c; jj++) {27 temp = INT_MIN;28 temp = max(temp,dp[i][j-1][ii][jj-1]);29 temp = max(temp,dp[i-1][j][ii-1][jj]);30 temp = max(temp,dp[i-1][j][ii][jj-1]);31 temp = max(temp,dp[i][j-1][ii-1][jj]);32 dp[i][j][ii][jj] = temp+t[i][j]+t[ii][jj];33 if(i == ii && j == jj) dp[i][j][ii][jj] = temp+t[i][j];34 }35 }36 }37 }38 printf("%d\n",dp[r][c][r][c]);39 }40 return 0;41 }
View code
Okay, AC code, dimensionality reduction. From discussion board
1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 using namespace std; 5 int v[52][52],f[102][52][52]; 6 int main() { 7 int i,j,k,t,c,T,m,n; 8 scanf("%d",&T); 9 while(T--) {10 scanf("%d%d",&m,&n);11 memset(v,0,sizeof(v));12 memset(f,0,sizeof(f));13 for(i=1; i<=m; i++)14 for(j=1; j<=n; j++)15 scanf("%d",&v[i][j]);16 c = m+n-2;17 for(k = 1; k < c; k++) {18 t=k+2 >m?m:k+2;19 for(i=1; i<=t; i++)20 for(j=i+1; j<=t; j++)21 f[k][i][j]=max(max(f[k-1][i][j],f[k-1][i][j-1]),max(f[k-1][i-1][j],f[k-1][i-1][j-1]))22 +v[i][k-i+2]+v[j][k-j+2];23 }24 f[c][m][m]=max(f[c-1][m-1][m],f[c-1][m][m-1]);25 printf("%d\n",f[c][m][m]);26 }27 return 0;28 }
View code