混合牛奶的最低花费

混合牛奶

题目链接https://www.luogu.com.cn/problem/P1208

题意

在得知所需要的牛奶量、农民的个数与每个农民生产的牛奶量与其单价后,找到能够使Marry获得所需牛奶花费最少的最佳方案,输出最佳方案花费的金额。

思路

1.将单价从小到大排序
2.利用for循环累加每个农民产出的量与对应所需要的价钱
当累加的值小于n(所需要的牛奶量)时,此时的价格就等于该农民的产量(ai)*单价pi,再进行累加;当累加的值大于或等于n(所需要的牛奶量)时,此时的价格就等于(n-当前已有的牛奶量)*单价(pi)再加上之前累加的价格。

坑点

实现步骤
  1. 利用结构体存放每个农民的单价与产量
  2. 按照单价进行排序
  3. 定义每次的牛奶量与所需价格分别进行赋值
    在这里插入图片描述这里使用sum记录牛奶量,ans记录所需费用
    根据排序后的单价,利用for从小到大进行产量的累加:
    在第一个农民那里,能够获得10的牛奶量,此时sum=10,ans=30,10<n;第二个农民能够获得20的牛奶量,此时sum=30,ans=130,30<n;第三个农民那可获得30的牛奶量,此时sum=60,ans=310,60<n,再到第四个农民,第四个农民能够产出80的牛奶量,但此时我们距离题目所给的n(100),只差40(n-当前的sum)的牛奶量,此时的ans=(n-当前的sum(60))*80(该农民牛奶的单价)+310(前面累加的ans)(到达所需的量break即可)
代码
#include <bits/stdc++.h>
using namespace std;
struct name{
	int p,c;
};
name num[5010];
bool cmp(name x,name y)
{
	return x.p<y.p;
}
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=0;i<m;i++)
	{
		cin>>num[i].p>>num[i].c;
	}
	sort(num+0,num+m,cmp);
	int sum=0;
	int ans=0;  //sum记录牛奶量,ans记录牛奶的费用
	for (int i=0;i<m;i++)
	{
		if(sum+num[i].c<n)
		{
			sum+=num[i].c;
			ans+=num[i].c*num[i].p;
		}
		else
		{
			ans+=(n-sum)*num[i].p;
			break;
		}
	 } 
	 cout<<ans;
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值