题意:需要收购总数为N的牛奶,现在有M个牛奶供应商(总量足够),给出总数和单价,求最小的花销。
核心:基本的贪心解法,按单价排序逐个选取。
目的在于熟悉基本的贪心法的基本方法和思路
/* ID: lsswxr1 PROG: milk LANG: C++ */ #include <iostream> #include <vector> #include <map> #include <list> #include <set> #include <deque> #include <stack> #include <queue> #include <algorithm> #include <cmath> #include <cctype> #include <cstdio> #include <iomanip> #include <cmath> #include <cstdio> #include <string> #include <cstring> #include <fstream> using namespace std;///宏定义 const int INF = 1000000000; const int MAXN = 5015; const int maxn = MAXN; ///全局变量 和 函数#define USACO #ifdef USACO #define cin fin #define cout fout #endif // int N, M; struct farm {int price, total;bool operator < (const farm& t) const{return price < t.price;} }; farm f[maxn]; int main() { #ifdef USACO ofstream fout ("milk.out");ifstream fin ("milk.in"); #endif ///变量定义while (cin >> N >> M){for (int i = 0; i < M; i++){cin >> f[i].price >> f[i].total;}sort(f, f + M);int remainsNeed = N, cost = 0;for (int i = 0; i < M; i++){if (f[i].total > remainsNeed){cost += f[i].price * remainsNeed;break;}cost += f[i].price * f[i].total;remainsNeed -= f[i].total;}cout << cost << endl;}///结束return 0; }