混合牛奶pascal程序

题意

给出Marry乳业每天对牛奶的需求量,还有每位奶农提供的牛奶单价和产量。计算采购足够数量的牛奶所需的最小花费。


分析

排序,最小价值优先取,太多了就退出循环,输出(之前的价值+还有多少需求*退出时的单价)。


var
n,m,i,j,tj:longint;
a,b:array[0..5000]of longint;


procedure kp(l,r:longint);
var
i,j,mid:longint;
begin
    if l>=r then exit;
    i:=l;j:=r;mid:=a[(l+r) div 2];
    repeat
         while a[i]<mid do inc(i);
         while a[j]>mid do dec(j);
         if i<=j then
         begin
             a[0]:=a[i];a[i]:=a[j];a[j]:=a[0];
             b[0]:=b[i];b[i]:=b[j];b[j]:=b[0];
             inc(i);dec(j);
         end;
    until i>j;
    kp(l,j);
    kp(i,r);
end;




begin
    readln(n,m);
    for i:=1 to m do
    readln(a[i],b[i]);
    kp(1,m);
    tj:=0;
    i:=1;
    while (i<=m)and(b[i]<=n) do
    begin
        tj:=tj+a[i]*b[i];
        n:=n-b[i];
        inc(i);
    end;
    write(tj+n*a[i]);
end.

原文地址:https://www.cnblogs.com/YYC-0304/p/9500208.html