文章目录
混合牛奶 Mixing Milk
一、题目描述
https://www.luogu.com.cn/problem/P1208
二、思路
典型的背包问题,物品可以被分隔,妥妥的贪心。先买价格便宜农民的奶牛,然后再买次便宜,依此类推。最终得到的一定是整体最优解。
三、代码实现
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct Farm{
int price;
int total;
void set_farm(int p,int t){
price=p;
total=t;
}
}f[2000006];
bool cmp(Farm f1,Farm f2){
return f1.price<f2.price;
}
int main(){
int n,m,p,t;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d",&p,&t);
f[i].set_farm(p,t);
}
sort(f+1,f+m+1,cmp);
int sum=0;
int i=1;
for(;i<=m;i++){
if(f[i].total>n)
break;
else{
sum+=f[i].total*f[i].price;
n-=f[i].total;
}
}
if(n>0){
sum+=n*f[i].price;
}
printf("%d",sum);
return 0;
}