题目概述:
这道题的核心就是给一对一对的数据,第一个值是单价,第二个值是数量。然后让你算达到某一个数值最少的花费。
算法思想:
蛋,最最开始的时候我以为要买必须全买,心里还不知道怎么做,结果看了一个样例发现是可以只买一部分的卧槽,那这题这么水!
嗯唯一要注意的就是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; }