我的算法是把每个数存在一个数组中。
坐标表示值,数组的值表示这个术的出现次数(规模=200,存放在a中)
随后再从大往小搜一遍,算法如下:
for i:=n downto 1 do
begin
for j:=w-n downto 1 do
begin
if a[j]>a[i] then f:=a[i] else f:=a[j];
if j=i then f:=a[i] div 2;
a[j]:=a[j]-f;
a[i]:=a[i]-f;
s:=s+f;{s表示最少分组数}
end;
s:=s+a[i];
end;
此程序可以优化,但一优化就有点乱(考试时是优化的),就算如此时间最大复杂度仅为200*200=40000,很小。优化后,平均最大复杂度<10000,极快
本人很菜,望各位大牛指教。