元のタイトル
コードの実装(アイデアを一目瞭然に読む最初のブラシ)
int* getMaxMatrix(int** matrix, int matrixSize, int* matrixColSize, int* returnSize){
int* ret = (int*)malloc(sizeof(int) * 4);
int i,j,k,max = INT_MIN;
(*returnSize) = 4;
memset(ret,0,sizeof(int) * 4);
int dp[201][201];
memset(dp,0,sizeof(dp));
for(i=0;i<matrixSize;i++)
{
for(j=0;j<matrixColSize[0];j++)
{
if(!j) dp[i][j] = matrix[i][j];
else dp[i][j] = matrix[i][j] + dp[i][j-1];
}
}
int leftrow,rightrow,tempsum = 0;
for(i=0;i<matrixColSize[0];i++)
{
for(j=i;j<matrixColSize[0];j++)
{
tempsum = rightrow = leftrow = 0;
for(k=0;k<matrixSize;k++)
{
tempsum = tempsum + dp[k][j] - (i>0 ? dp[k][i-1] : 0);
if(tempsum > max)
{
max = tempsum;
rightrow = k;
ret[0] = leftrow,ret[1] = i;
ret[2] = rightrow,ret[3] = j;
}
if(tempsum < 0)
{
tempsum = 0;
leftrow = k+1;
}
}
}
}
return ret;
}