粮草采购的最小花费
一、题目核心考点
本题属于贪心算法的经典应用,核心目标是在满足粮草需求量的前提下,通过 “优先采购单价最低的粮草” 的贪心策略,实现总花费最小化。
贪心策略选择:要使总花费最小,需优先采购单价最低的粮草,直到采购量满足需求。这是因为单价越低,单位粮草的成本越低,优先选择能最大化降低总花费。
步骤拆解:
存储每个农户的「单价、可供应粮草数量」;
按单价升序排序所有农户,确保先遍历低价农户;
遍历排序后的农户,每次采购 “当前农户可供应数量” 和 “剩余需求数量” 的较小值,累加花费,直到剩余需求为 0。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
int a[m+1],b[m+1];
for(int i=1;i<=n;i++)
cin>>a[i]>>b[i];
for(int i=1;i<=m;i++)
for(int i1=1;i1<=m-i;i1++)
if(a[i1]>a[i1+1])
{
swap(a[i1],a[i1+1]);
swap(b[i1],b[i1+1]);
}
int c=0,i=1;
while(n>0)
{
int x=min(b[i],n);
c+=a[i]*x;
n-=x;
i++;
}
cout<<c;
return 0;
}