//一道简单的贪心题,总的排序一遍,选价格最小的那个人的牛奶,然后依次往下选,直到量够了为止。
{
ID:1011mashuo
PROG:milk
LANG:PASCAL
}
program milk;
type atp=record
pri,num:int64;
end;
var
cost:int64;
n,m:longint;
a:array [0..5000] of atp;
procedure init;
var
i:longint;
begin
cost:=0;
readln(n,m);
for i:=1 to m do readln(a[i].pri,a[i].num);
end;
procedure qsort(l,r:longint);
var
m:int64;
i,j:longint;
t:atp;
begin
i:=l;
j:=r;
m:=a[(l+r) shr 1].pri;
repeat
while a[i].pri<m do inc(i);
while a[j].pri>m do dec(j);
if i<=j then
begin
t:=a[i];
a[i]:=a[j];
a[j]:=t;
inc(i);
dec(j);
end;
until i>j;
if i<r then qsort(i,r);
if l<j then qsort(l,j);
end;
procedure main;
var
i:longint;
sy:int64;
begin
sy:=n;
for i:=1 to m do
begin
if sy>=a[i].num then
begin
inc(cost,a[i].pri*a[i].num);
dec(sy,a[i].num);
end
else
begin
inc(cost,a[i].pri*sy);
sy:=0;
end;
if sy=0 then break;
end;
end;
begin
assign(input,'milk.in'); reset(input);
assign(output,'milk.out'); rewrite(output);
init;
qsort(1,m);
main;
writeln(cost);
close(input); close(output);
end.
Mixing Milk (milk)[USACO 1.3.1]
最新推荐文章于 2024-05-10 21:22:09 发布