一、题目描述

二、算法分析说明
将所有农民的牛奶价格和牛奶数量放入一个对或做成结构体,然后快排,先按价格从低到高排序,价格相同则按拥有牛奶的数量从高到低排序。从排最前的开始选,买完该农民的全部牛奶之后就买下一农民的牛奶,一直到数量不少于 n 。
这份代码会模拟:在已购买牛奶的数量 t 达到 n 之前一律买下已访问到的农民的全部牛奶。循环跳出以后,再将多余的牛奶数量减回去。但是有一组数据是 n = 0 。当 n > 0 时,访问到的农民的编号 i 会先继续 +1 才结束循环,所以扣除多算的牛奶数量时要先 --i 才能正确扣除多出的牛奶的相应价格。如果 n = 0 ,这里会出现 Runtime Error 。所以要补充判断
if (i != 0)
本代码中 t 代表已经购入的牛奶的总数量。
三、AC 代码(1 ms)
#include<cstdio>
#include<map>
#include<algorithm>
#pragma warning(disable:4996)
using namespace std;
pair<unsigned, unsigned> p[5000

本文详细解析了 USACO 比赛中的 C0259 题目——混合牛奶。算法思路是将牛奶信息排序,优先选择价格低且数量多的牛奶。代码实现过程中需特别注意当购买牛奶数量 n=0 时可能出现的 Runtime Error,通过判断 i 的值来修正结果。最后给出了 AC 代码,运行时间为 1 ms。
最低0.47元/天 解锁文章
961

被折叠的 条评论
为什么被折叠?



