总体来说比较简单,用了结构体,再用一下sort排序,将价格从小到大排
注意临界问题,可能还需要购买的数量会<=下一个coun
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m;//n代表需要牛奶的总数,m代表提供牛奶的农民个数
struct milk
{
int price;
int coun;
}man[5003];
bool com(milk a,milk b)
{
return a.price<b.price;
}//就是比较大小
int main()
{
int sum=0,pri=0;
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++)
{
scanf("%d%d",&man[i].price,&man[i].coun);
}
sort(man,man+m,com);
for(int i=0;i<m;i++)
{
if(man[i].coun<=n)//等号,一开始没加等号50%通过率
{
if((n-sum)<=man[i].coun)//等号
{
pri+=(n-sum)*man[i].price;//临界单独处理
break;//注意要结束
}
else
{
sum+=man[i].coun;
pri=pri+man[i].coun*man[i].price;
}
}
}
printf("%d",pri);
return 0;
}