1 条题解
-
0
#include<bits/stdc++.h> using namespace std; // [1] 全局变量:n为需要采购的牛奶总数量,m为提供牛奶的农民数量 int n,m; // [2] 结构体定义:存储单个农民的牛奶信息,p为单价、a为可供应数量;arr数组存储所有农民的信息 struct stu{ int p,a; }arr[5100]; // 自定义比较函数(主函数排序时调用,跳转注释) // [6] 排序规则:按牛奶单价p从小到大升序排列,是贪心策略的核心 bool cmp(stu x,stu y){ return x.p<y.p; } int main() { // [3] 输入核心参数:需要采购的牛奶总量n、提供牛奶的农民数量m cin>>n>>m; // [4] 循环遍历所有农民,依次输入单价和可供应数量,存入数组arr for(int i=1;i<=m;i++){ cin>>arr[i].p>>arr[i].a; } // [5] 对农民信息按单价升序排序,调用自定义cmp比较函数 sort(arr+1,arr+m+1,cmp); // [7] 初始化变量:i为农民遍历索引(从第一个开始),min_moey为最小采购总花费(初始0) int i=1,min_moey=0; // [8] 贪心采购核心循环:剩余采购量>0 且 还有未遍历的农民,继续采购 while(0<n && i<=m){ // [9] 判定:当前农民可供应量小于剩余采购量,全部采购该农民的牛奶 if(n>arr[i].a){ min_moey+=arr[i].p*arr[i].a; // 累加该农民全部牛奶的采购成本 n-=arr[i].a; // 更新剩余需要采购的牛奶数量 }else{ // [10] 判定:当前农民可供应量足够剩余采购量,仅采购所需剩余数量 min_moey+=arr[i].p*n; // 累加剩余数量牛奶的采购成本 n=0; // 采购需求满足,置剩余量为0终止采购 } i++; // 遍历索引后移,处理下一个农民 } // [11] 输出最终计算的牛奶最小采购总花费 cout<<min_moey; return 0; }
- 1
信息
- ID
- 1043
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者