PHP 平分數組

來源:互聯網
上載者:User
 1 <?php 2     /** 3     *一個整數數組,長度為n,將其分為m 份,使各份的和相等,求m 的最大值 4     *比如{3,2,4,3,6} 可以分成{3,2,4,3,6} m=1; 5     *{3,6}{2,4,3} m=2 6     *{3,3}{2,4}{6} m=3 所以m 的最大值為3 7     **/ 8  9     #解題思路10     #首先m必須滿足兩個條件11     #1. 1<=m<=n12     #2. sum(a) % m = 0,即sum(a)必須是m的倍數,其中a為待切分數組13     #解題步驟:14     #1. m從n開始,依次減小15     #2. 判斷m是否能滿足題目條件,如滿足,則返回m以及分組資訊16     #對於判斷m是否能滿足條件,使用輔助數組group_info[]17     #其中group_info[i]=k表示a[i]被分配到第k組18 19     function maxm($a) {20         $len = count($a);21         $asum = 0;22         for ($i = 0; $i < $len; $i++) $asum += $a[$i];23 24         #25         for ($m = $len; $m >= 2; $m--) {26             if ($asum % $m != 0) continue;27             $group_info = array(); #分組資訊28             for ($i = 0; $i < $len; $i++) $group_info[$i] = 0;29             if (test($a, $m, $asum, $group_info, $asum / $m, 1)) 30                 return array("m" => $m, "group_info" => $group_info);31         }32 33         return array("m"=> 1);34     }35 36     function test($a, $m, $asum, &$group_info, $goal, $group_id) {37         $len = count($a);38         $msum = $asum / $m;39 40         if ($goal == 0) {41             $group_id++;42             $goal = $msum;43             #所有分組分配結束44             if ($group_id == $m + 1) return true;45         } else if ($goal < 0) {46             return false;47         }48         #將數組分組,並判斷是否能滿足條件49         for ($i = 0; $i < $len; $i++) {50             #跳過已指派元素51             if ($group_info[$i] != 0) continue;52             $group_info[$i] = $group_id;53             #分配完a[i]繼續往下分配54             if (test($a, $m, $asum, $group_info, $goal - $a[$i], $group_id)) return true;55             #a[i]分配失敗,重新置為056             $group_info[$i] = 0;57         }58 59         return false;60     }61 62     $a = array(3, 2, 4, 3, 6, 2, 2, 2);63     print_r(maxm($a));64 ?>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.