USACO-Chapter1-Section 1.3-Mixing Milk(milk)
【题目描述】
由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要。帮助梅丽乳业找到最优的牛奶采购方案。
梅丽乳业从一些奶农手中采购牛奶,并且每一位奶农为乳制品加工企业提供的价格是不同的。此外,就像每头奶牛每天只能挤出固定数量的奶,每位奶农每天能提供的牛奶数量是一定的。每天梅丽乳业可以从奶农手中采购到小于或者等于奶农最大产量的整数数量的牛奶。
给出梅丽乳业每天对牛奶的需求量,还有每位奶农提供的牛奶单价和产量。计算采购足够数量的牛奶所需的最小花费。
注:每天所有奶农的总产量大于梅丽乳业的需求量。
【输入格式】
第 1 行共二个数值:N,(0<=N<=2,000,000)是需要牛奶的总数;M,(0<=M<=5,000)是提供牛奶的农民个数。第 2 到 M+1 行:每行二个整数:Pi 和 Ai。Pi(0<= Pi<=1,000) 是农民 i 的牛奶的价格。Ai(0 <= Ai <= 2,000,000)是农民 i 一天能卖给Marry的牛奶制造公司的牛奶数量。
【输出格式】
单独的一行包含单独的一个整数,表示Marry的牛奶制造公司拿到所需的牛奶所要的最小费用
【输入样例】
100 5 5 20 9 40 3 10 8 80 6 30
【输出样例】
630
【思路】
本单元是贪心专题,固然此题是贪心,但是这贪心也太……,废话不说QuickSort+乱搞。也许是先难后易吧……(主意数据范围)
【代码】
- Executing...
- Test 1: TEST OK [0.000 secs, 352 KB]
- Test 2: TEST OK [0.000 secs, 352 KB]
- Test 3: TEST OK [0.000 secs, 352 KB]
- Test 4: TEST OK [0.000 secs, 352 KB]
- Test 5: TEST OK [0.000 secs, 352 KB]
- Test 6: TEST OK [0.011 secs, 352 KB]
- Test 7: TEST OK [0.000 secs, 352 KB]
- Test 8: TEST OK [0.011 secs, 352 KB]
- All tests OK.
{
ID : c_CaM.19
LANG: PASCAL
TASK: milk
}
Program CaM(input,output);
Var
a,b:array[0..10100] of longint;
cost,n,m,i:longint;
Procedure qs(x,y:longint);
Var
i,j,mid,t:longint;
Begin
i:=x; j:=y; mid:=b[(x+y)div 2];
repeat
while b[i]<mid do inc(i);
while b[j]>mid do dec(j);
if i<=j then
Begin
t:=a[i]; a[i]:=a[j]; a[j]:=t;
t:=b[i]; b[i]:=b[j]; b[j]:=t;
inc(i); dec(j);
End;
until i>j;
if x<j then qs(x,j);
if i<y then qs(i,y);
End;
Procedure innt;
Begin
assign(input,'milk.in'); reset(input);
assign(output,'milk.out'); rewrite(output);
End;
Procedure outt;
Begin
close(input);
close(output);
End;
Begin
innt;
readln(n,m);
for i:=1 to m do
Begin
read(b[i]);
read(a[i]);
End;
qs(1,m);
for i:=1 to m do
Begin
if n-a[i]<=0 then
Begin
cost:=cost+n*b[i];
break;
End
else Begin cost:=cost+a[i]*b[i]; n:=n-a[i]; End;
End;
writeln(cost);
outt;
End.
浙公网安备 33010602011771号