输入样例
|
3 16
5 8 58
2 1 1
|
2 58
5 8
2 1
|
2 0
5 8
2 1
|
7 33
5 1 6 5 8 4 7
2 1 1 1 4 3 2
|
输出样例
|
1
|
0
|
-1
|
5
|
样例解释
|
到了第1时刻,三棵小草的高度依次是7,9,59。如果奶牛Bessie把高度是59的小草剪掉,那么三棵小草高度是7+9+0=16,任务完成。
|
|
|
第1秒剪第2棵小草,第2秒剪第0棵小草,第3秒剪6棵小草,第4秒剪第5棵小草,第5秒剪第4棵小草。
|
uses math;
var
a,b,c,ans,ans1,i,j,k,ans2:longint;
v,r:array[0..50]of longint;
f:array[0..50,0..50]of longint;
procedure ss(l,u:longint);
var
i,j,mid,mid1:longint;
begin
i:=l;
j:=u;
mid:=r[(i+j) div 2];
mid1:=v[(i+j) div 2];
while i<j do
begin
while (r[i]<mid)or((r[i]=mid)and(v[i]>mid1)) do inc(i);
while (r[j]>mid)or((r[j]=mid)and(v[j]<mid1)) do dec(j);
if i<=j then
begin
v[0]:=v[i];
v[i]:=v[j];
v[j]:=v[0];
r[0]:=r[i];
r[i]:=r[j];
r[j]:=r[0];
inc(i);
dec(j);
end;
end;
if l<j then ss(l,j);
if i<u then ss(i,u);
end;
begin
assign(input,'grass.in');reset(input);
assign(output,'grass.out');rewrite(output);
readln(a,b);
for c:=1 to a do
begin
read(v[c]);
inc(ans,v[c]);
end;
for c:=1 to a do
begin
read(r[c]);
inc(ans1,r[c]);
end;
if ans<=b then
begin
writeln(0);
halt;
end;
ss(1,a);
fillchar(f,sizeof(f),127 div 3);
ans2:=maxlongint;
f[0,0]:=ans;
for i:=1 to a do
begin
for j:=0 to i-1 do
begin
for k:=0 to j do
begin
f[i,k+1]:=min(f[i,k+1],f[j,k]+ans1-((k+1)*r[i])-v[i]);
if (f[i,k+1]<=b) then ans2:=min(ans2,k+1);
end;
end;
end;
if ans2=maxlongint then
begin
writeln(-1);
halt;
end;
writeln(ans2);
close(input);
close(output);
end.