lue;
8 int weight;
9 };
10 bool bmp(Rem a,Rem b)
11 {
12 return (a.value<b.value);
13 }
14 int temp=0;
15 int a[maxn];int h[maxn];
16 int c0[maxn];
17 int c[maxn];
18 Rem rem[maxn];
19 Rem rem0[maxn];
20 int m,b,H,n;
21 int main()
22 {
23 int T;
24 scanf("%d",&T);
25 while(T--)
26 {
27 temp=0;
28 int res=1000000000+7;
29 scanf("%d %d %d %d",&m,&b,&H,&n);
30 for(int i=1;i<=m;i++)
31 {
32 scanf("%d",&a[i]);
33 }
34 for(int i=1;i<=n;i++)
35 {
36 scanf("%d",&h[i]);
37 }
38 for(int i=1;i<=m;i++)
39 {
40 scanf("%d",&c0[i]);
41 }
42 int test=1;
43 int u=1,r=1;
44 int weight=0;
45 int needweight=0;
46 int num=0;
47 for(;test<=n;test++)
48 {
49 temp=0;weight=0;needweight=0;u=1;r=1;
50 for(int k=1;k<=m;k++)
51 {
52 scanf("%d",&c[k]);
53 if(c[k]<c0[k])
54 {
55 rem[u].value=c0[k]-c[k];
56 rem[u++].weight=a[k];
57 temp+=c[k]*a[k];
58 }
59 else
60 {
61 rem0[r].value=c[k]-c0[k];
62 rem0[r++].weight=a[k];
63 temp+=c0[k]*a[k];
64 weight+=a[k];
65 }
66 }
67 if(weight>=b)
68 {
69 sort(rem0+1,rem0+r,bmp);
70 needweight=weight-b;
71 for(int k=1;k<r;k++)
72 {
73 if(rem0[k].weight>=needweight)
74 {
75 temp+=needweight*rem0[k].value;
76 needweight=0;
77 break;
78 }
79 else
80 {
81 needweight-=rem0[k].weight;
82 temp+=rem0[k].value*rem0[k].weight;
83 }
84 }
85 if(res>temp+H+h[test])
86 {
87 res=temp+H+h[test];
88 num=test;
89 }
90 }
91 else
92 {
93 sort(rem+1,rem+u,bmp);
94 needweight=b-weight;
95 for(int k=1;k<u;k++)
96 {
97 if(rem[k].weight>=needweight)
98 {
99 needweight=0;
100 temp+=needweight*rem[k].value;
101 break;
102 }
103 else
104 {
105 needweight-=rem[k].weight;
106 temp+=rem[k].value*rem[k].weight;
107 }
108 }
109 if(res>temp+H+h[test])
110 {
111 res=temp+H+h[test];
112 num=test;
113 }
114 }
115 }
116 printf("%d %d\n",num,res);
117 }
118 return 0;
119 }
好了,还有E题不会,以后再说...
|