一個最簡單的貪心策略的問題,使用multimap<int,int>按照價格由低到高排序,依次買價格最低的牛奶,直到買夠。ios
/* ID:jzzlee1 PROG:milk LANG:C++ */ #include <fstream> #include<iostream> #include<map> #include<utility> #include<cstring> using namespace std; ifstream fin("milk.in"); ofstream fout("milk.out"); int main() { int n,m; fin>>n>>m; multimap<int,int> maps; int x,y;int i; for(i=0;i!=m;i++) { fin>>x>>y; maps.insert(make_pair(x,y)); } multimap<int,int>::iterator it; int sum=0,money=0; for(it=maps.begin();sum!=n;it++) { if(n-sum>it->second) { sum+=it->second; money+=it->first*it->second; } else { money+=it->first*(n-sum); sum=n; } } fout<<money<<endl; return 0; }