1<?php2/*
*3*乙個整數陣列,長度為n,將其分為m 份,使各份的和相等,求m 的最大值
4*比如 可以分成 m=1;
5* m=2
6* m=3 所以m 的最大值為37*
*/89#
解題思路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_info17#
其中group_info[i]=k表示a[i]被分配到第k組
1819
function maxm($a
) 32
33return
array("m"=> 1);34}
3536
function test($a, $m, $asum, &$group_info, $goal, $group_id
) else
if ($goal
< 0) 48#
將陣列分組,並判斷是否能滿足條件
49for ($i = 0; $i
< $len; $i++)
5859
return
false;60
}6162$a = array(3, 2, 4, 3, 6, 2, 2, 2);
63print_r(maxm($a
));64 ?>
差分陣列概述
在網上講差分陣列的博文很少,也很難找到。一度以為差分陣列是傳播於小眾的神犇技巧所以一直放著沒有去研習。今天做了 bzoj1635後發現各路神犇都用差分陣列,本蒟卻傻傻寫了線段樹。對於序列a 取a i a i 1 為其差分陣列b i 的值,可以發現,a i bj 1 j i 如 對於序列 a b c ...
區分陣列物件
最佳方法 var arr 1,2,3,1 var arr2 function isarrayfn value else alert isarrayfn arr true alert isarrayfn arr2 true tostring方法 function isarrayfn o var arr...
港口 差分陣列)
傳送門 思路 因為是區間加減,所以考慮差分陣列,題意變為 要求差分陣列d 2 d 3 d n d 2 d 3 dots d n d 2 d 3 d n 全為0.每次區間加或減會使差分陣列乙個加1,乙個減1,因為要用最小次數,所以每次操作最好產生有效貢獻,可知當為正數或負數的差分陣列變為0後,剩下我們...