首页 > 试题广场 >

问题描述:将n个整数分成k组(k≤n,要求每组不能为空),显

[填空题]
问题描述:将n个整数分成k组(k≤n,要求每组不能为空),显然这k个部分均可得到一个各自的和s1,s2,……sk,定义整数P为: P=(s1- s2)2+(s1一s3)2+……+(s1- sk)2+(s2-s3)2+……+(Sk-1-Sk)2
问题求解:求出一种分法,使P为最小(若有多种方案仅记一种〉
程序说明:
数组:a[1],a[2],...a[n]存放原数
s[1],s[2],...,s[k]存放每个部分的和
b[1],b[2],...,b[n]穷举用临时空间
d[1],d[2],...,d[n]存放最佳方案
程序:
program exp4;
var
    i,j,n,k : integer;
    a :array [1..100] of integer;
    b,d:array [0..100] of integer;
    s :array[1..30] of integer;
begin
    readln(n,k);
    for i:=1 to n do read(a[i]);
    for i:=0 to n do b[i]:=1;
    cmin:=1000000;
    while (b[0]=1) do
    begin
        for i:=1 to k do   1
        for i:=1 to n do   2  
        sum:=0;
        for i:=1 to k-1 do
          for j:=   3
              sum:=sum+(s[i]-s[j])*(s[i]-s[j]);
        if    4     then
        begin
           cmin:=sum;
           for i:=1 to n do d[i]:=b[i];
        end;
        j:=n;
        while     5      do j:=j-1;
        b[j]:=b[j]+1;
        for i:=j+1 to n do     6   
    end;
    writeln(cmin);
    for i:=1 to n do write(d[i]:40);
    writeln;
end.

这道题你会答吗?花几分钟告诉大家答案吧!