稍微列个式子就知道是贪心

 1 var w,h,c,a,f:array[0..50010] of longint;
 2     m,b,h0,n,i,p,j,x,ans,s:longint;
 3 
 4 procedure swap(var a,b:longint);
 5   var c:longint;
 6   begin
 7     c:=a;
 8     a:=b;
 9     b:=c;
10   end;
11 
12 procedure sort(l,r: longint);
13   var i,j,x,y: longint;
14   begin
15     i:=l;
16     j:=r;
17     x:=a[(l+r) div 2];
18     repeat
19       while a[i]<x do inc(i);
20       while x<a[j] do dec(j);
21       if not(i>j) then
22       begin
23         swap(a[i],a[j]);
24         swap(f[i],f[j]);
25         inc(i);
26         j:=j-1;
27       end;
28     until i>j;
29     if l<j then sort(l,j);
30     if i<r then sort(i,r);
31   end;
32 
33 begin
34   readln(m,b,h0,n);
35   for i:=1 to m do
36     read(w[i]);
37   for i:=1 to n do
38     read(h[i]);
39   for i:=1 to m do
40     read(c[i]);
41   ans:=2147483647;
42   for i:=1 to n do
43   begin
44     s:=h0+h[i];
45     for j:=1 to m do
46     begin
47       read(x);
48       a[j]:=c[j]-x;
49       f[j]:=j;
50       s:=s+w[j]*x;
51     end;
52     sort(1,m);
53     x:=0;
54     for j:=1 to m do
55       if x+w[f[j]]<b then
56       begin
57         x:=x+w[f[j]];
58         s:=s+a[j]*w[f[j]];
59       end
60       else begin
61         s:=s+a[j]*(b-x);
62         break;
63       end;
64     if ans>s then
65     begin
66       p:=i;
67       ans:=s;
68     end;
69   end;
70   writeln(p);
71   writeln(ans);
72 end.
View Code

 

posted on 2015-01-26 19:05  acphile  阅读(157)  评论(0编辑  收藏  举报