Public feed #890033

Someone

public text v1 · immutable
Raw Edit
·published 2008-02-03 12:12 UTC
rendered paste body
# 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";