《Mixing Milk》的最有解
2026-04-19 21:16:22
发布于:浙江
1阅读
0回复
0点赞
本题是USACO提供的贪心+结构体的题。
先逐步分析题目:
【题干】
Marry 乳业想采购一些牛奶,找到了几位奶农,用奶农提供的数据,来计算采购足够数量的牛奶所需的最小花费。
【输入】
第一行二个整数 ,表示需要牛奶的总量,和提供牛奶的农民个数。
接下来 行,每行两个整数 ,表示第 个农民牛奶的单价,和农民 一天最多能卖出的牛奶量。
【输出】
输出最小金额。
【数据】
。
分析完成后,再将思路分享给大家:
可以先定义一个结构体,存单价和提供总数。
再对单价进行升序排序。
最后进行贪心。
贪心时的注意事项:
1.注意
while的结束条件
2.注意最后的特判环节(早代码里会提到)
接下来就是心心念念的 环节
#include<bits/stdc++.h>
using namespace std;
struct pai{
int p,a;//定义结构体
}b[2000005];
bool cmp(pai x,pai y){
return x.p<y.p;
}//排序标准
int main(){
int m,n;
cin>>m>>n;
long long sum=0;
for(int i=1;i<=n;i++){
cin>>b[i].p>>b[i].a;
}
sort(b+1,b+1+n,cmp);//排序
int j=0;
while(m>0&&j<=n){//while的结束语句
if(m<b[j].a){//判断是否需要买全部牛奶
sum+=m*b[j].p;//计算金费
break;
}//重点:特判,没有这组if,全WA。
m-=b[j].a;
sum+=b[j].a*b[j].p;
++j;//计算金费
}
cout<<sum;
return 0;
}
要个赞不过分吧?
这里空空如也








有帮助,赞一个