, , ...
, (1,2,3,4) , , , ,
$array[$cook_id][$dish_number] = $score;
asort() , $array [$ cook_id] = array ($ lower_scored_dish,..., $maximum);
, .
a, b, c 0,1,2
$array['a'] = array(0=>100, 1=>50, 2=>0);
$array['b'] = array(0=>100, 1=>100, 2=>50);
$array['c'] = array(0=>50, 1=>50, 2=>100);
asort(): $ array ['a'] = array (0 = > 100, 1 = > 50, 2 = > 0); $ array ['b'] = array (0 = > 100, 1 = > 100, 2 = > 50); $ array ['c'] = array (2 = > 100, 0 = > 50, 1 = > 50);
'a', 0 50 (). Cook 'b' dih 0, 0 . , , ( , cook 'a' 0.
0, , 'b'. 0, "" 1. 1, "b" 1.
Cook 'c' 2.
, - , , - , .
:
$array['a'] = array(0=>75, 1=>50, 2=>0);
$array['b'] = array(0=>100, 1=>50, 2=>50);
$array['c'] = array(0=>100, 1=>25, 2=>25);
'a' , 0 , 25. 'b' 50 'c' 75. Cook 'c' 0.
, 'a' 1 50, 'b' 0. 'a' 1 'b' 2.
, . , /, .
:
$array['a'] = array(0=>200, 1=>148, 2=>148, 3=>0);
$array['b'] = array(0=>200, 1=>149, 2=>0, 3=>0);
$array['c'] = array(0=>200, 1=>150, 2=>147, 3=>147);
$array['d'] = array(0=>69, 1=>18, 2=>16, 3=>15);
'a' 0, max , 0,
"b" 1 149
'd' 2, 'c'
'c' 3
: 200 + 149 + 147 + 16 = 512
, , . , : " , ?"
: , a (0) + d (2) = 200 + 16 = 216, a (2) + d (0) = 148 + 69 = 217.
, " " , :
$picks = array(0=>'a', 1=>'b', 2=>'c', 3=>'d');
do {
$best_change = false;
$best_change_weight = 0;
foreach ($picks as $dish1 => $cook1) {
foreach ($picks as $dish2 => $cook2) {
if (($array[$cook1][$dish1] + $array[$cook2][$dish2]) <
($array[$cook1][$dish2] + $array[$cook2][$dish1]))
{
$old_score = $array[$cook1][$dish1] + $array[$cook2][$dish2];
$new_score = $array[$cook1][$dish2] + $array[$cook2][$dish1];
if (($new_score - $old_score) > $best_change_weight) {
$best_change_weight = $new_score - $old_score;
$best_change = $dish2;
}
}
}
if ($best_change !== false) {
$cook2 = $picks[$best_change];
$picks[$dish1] = $cook2;
$picks[$dish2] = $cook1;
break;
}
}
} while ($best_change !== false);
, , , , ($ array [$ cook1] [$ dish1] + $array [$ cook2] [$ dish2]) == ($ array [$ cook1] [$ dish2] + $array [$ cook2] [$ dish1])
, - ", ?"
, ""
[a1] a2 a3
b1 [b2] b3
c1 c2 [c3]
a1 + b2 == a2 + b1, "a" "b" . , 100%, , , :
a1 [a2] a3
b1 b2 [b3]
[c1] c2 c3
, , . , , .
3x3, , " ", , , , . , , . , , , - , . , , , , .
, , 64 (8x8) 8 /. , , 72. , 128. , do-while , , 40k.