USACO 1.3.1 Mixing Milk

来源:互联网 发布:飞机杯品牌 知乎 编辑:程序博客网 时间:2024/06/06 15:35

题目概述:

这道题的核心就是给一对一对的数据,第一个值是单价,第二个值是数量。然后让你算达到某一个数值最少的花费。

算法思想:

蛋,最最开始的时候我以为要买必须全买,心里还不知道怎么做,结果看了一个样例发现是可以只买一部分的卧槽,那这题这么水!

嗯唯一要注意的就是map这货不能重复插入。

代码部分:

#include <iostream>#include <fstream>#include <string>#include <map>using namespace std;ifstream fin("milk.in");ofstream fout("milk.out");int n, m;int main() {fin >> n >> m;// 因为C++的map自带排序,所以这里直接用了比较方便map<int, int> mymap;for (int i = 0; i < m; i++){int a, b;fin >> a >> b;// 这个一定要注意,因为map如果键值重复就不会插入了,所以这里要判断。if (mymap.count(a)) mymap[a] += b;else mymap.insert(make_pair(a, b));}int res = 0;for (map<int, int>::iterator it = mymap.begin(); it != mymap.end(); it++) {// 分两种情况就好if (n > it->second) {res += it->first * it->second;n -= it->second;} else {res += it->first * n;break;}}fout << res << endl;return 0;}


0 0