usaco problem76:mixing milk解题报告

这道题很简单的贪心算法,写到这里只是为了总结一下

C++ 中map可以简单地实现排序和联系两组数

这里唯一值得注意的地方是map.insert()这个方法在key已存在的情况下并不插入,所以得看一下返回值,如果插入失败,就更改key所关联的值。

/*

ID:thestor1

PROG:milk

LANG:C++

*/

 

#include <iostream>

#include <fstream>

//#include <utility>

#include <map>

using namespace std;

 

int main()

{

ifstream is("milk.in");

int N,M;

is>>N>>M;

map<int,int> milk;

for(int ix=0;ix<M;++ix)

{

int price,amount;

is>>price>>amount;

pair<map<int,int>::iterator,bool> ret=milk.insert(make_pair(price,amount));

if(!ret.second)

ret.first->second+=amount;

}

is.close();

//ofstream save("save.txt");

//for(map<int,int>::iterator iter=milk.begin();iter!=milk.end();++iter)

//{

//save<<iter->first<<"  "<<iter->second<<endl;

//}

//save.close();

 

int tPrice=0,tAmount=0;

map<int,int>::iterator iter=milk.begin();

while(tAmount<N)

{

if(N-tAmount>iter->second)

{

tPrice+=iter->first*iter->second;

tAmount+=iter->second;

}

else

{

tPrice+=iter->first*(N-tAmount);

tAmount=N;

}

++iter;

}

ofstream os("milk.out");

os<<tPrice<<endl;

os.close();

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值