Public feed
#890033
# O(N^3) max submatrix sum
my $n = 15;
my @m = map { my @r = map { int(rand(19))-9 } 0..$n-1; \@r; } 0..$n-1;
print "m=\n",map { my $r = $m[$_]; "$_: @$r\n" } 0..$n-1;
my @s = map { my @r = map { 0 } 0..$n-1; \@r; } 0..$n;
for (my $c=0;$c<$n;$c++) {
for (my $r=1;$r<=$n;$r++) {
$s[$r][$c] = $m[$r-1][$c]+$s[$r-1][$c];
}
}
my ($m_top,$m_bot,$m_left,$m_right,$m_sum)=(-1,-1,-1,-1,-1);
for (my $top=0;$top<$n;$top++) {
for (my $bot=$top;$bot<$n;$bot++) {
my ($left,$sum) = (-1,-1);
for (my $right=0;$right<$n;$right++) {
$left = $right unless ($sum>0);
$sum = ($s[$bot+1][$right]-$s[$top][$right]) + (($sum>0)?$sum:0);
($m_top,$m_bot,$m_left,$m_right,$m_sum) =
($top,$bot,$left,$right,$sum)
if (($sum>$m_sum) or ($m_top==-1))
}
}
}
print "top=$m_top bot=$m_bot left=$m_left right=$m_right sum=$m_sum\n";