31 lines
813 B
ObjectPascal
31 lines
813 B
ObjectPascal
var
|
|
ans,c,n,i,j:longint;
|
|
s,min,a:array[0..41] of longint;
|
|
procedure find(x,z:longint);
|
|
begin
|
|
if z > ans then ans:=z;
|
|
if ans=c then exit;
|
|
if (x<=n) AND (z+min[x] <=c) and (z+s[x] > ans) then
|
|
begin
|
|
find(x+1,z);
|
|
if z+a[x] <= c then find(x+1,z+a[x]);
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
assign(input,'load.in');reset(input);
|
|
assign(output,'load.out');rewrite(output);
|
|
read(n,c);
|
|
for i:=1 to n do read(a[i]);
|
|
s[n]:=a[n];
|
|
min[n]:=a[n];
|
|
for i:=n-1 downto 1 do
|
|
begin
|
|
s[i]:=a[i]+s[i+1];
|
|
if a[i] < min[i+1] then min[i]:=a[i]
|
|
else min[i]:=min[i+1];
|
|
end;
|
|
find(1,0);
|
|
writelN(ans);
|
|
close(input);close(output);
|
|
end. |