USACO题目Mixing Milk (milk)及代码解析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
描述
由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要。帮助Marry乳业找到最优的牛奶采购方案。
Marry乳业从一些奶农手中采购牛奶,并且每一位奶农为乳制品加工企业提供的价格是不同的。此外,就像每头奶牛每天只能挤出固定数量的奶,每位奶农每天能提供的牛奶数量是一定的。每天Marry乳业可以从奶农手中采购到小于或者等于奶农最大产量的整数数量的牛奶。给出Marry乳业每天对牛奶的需求量,还有每位奶农提供的牛奶单价和产量。计算采购足够数量的牛奶所需的最小花费。
注:每天所有奶农的总产量大于Marry乳业的需求量。
[编辑]格式
PROGRAM NAME: milk
INPUT FORMAT:file milk.in
第1 行共二个数值:N,(0<=N<=2,000,000)是需要牛奶的总数;M,(0<= M<=5,000)是提供牛奶的农民个数。
第2 到M+1 行:每行二个整数:P i和A i。
P i(0<= P i<=1,000) 是农民i 的牛奶的价格。
A i(0 <= A i <= 2,000,000)是农民i 一天能卖给Marry的牛奶制造公司的牛奶数量。
OUTPUT FORMAT:file milk.out
单独的一行包含单独的一个整数,表示Marry的牛奶制造公司拿到所需的牛奶所要的最小费用
[编辑]SAMPLE INPUT
100 5
5 20
9 40
3 10
8 80
6 30
[编辑]SAMPLE OUTPUT
630
很牛逼!!!!利用数组先天排序!
#include
int a[1001] = {};
int main()
{
freopen("milk.in", "r", stdin);
freopen("milk.out", "w", stdout);
int m, n, price, amount, res = 0;
scanf("%d%d", &n, &m);
for (; m; --m)
{
scanf("%d%d", &price, &amount);
a[price] += amount;
}
for (m = 0; ; ++m)
{
if (n > a[m])
{
res += a[m]*m;
n -= a[m];
}
else
{
res += n*m;
break;
}
}
printf("%d\n", res);
} 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
#include
using namespace std;
int m,n,i,j;
int p1[5000],p2[5000];
int sum,ans;
int main(){
int max=0;
freopen("milk.in","r",stdin);
freopen("milk.out","w",stdout);
cin>>n>>m;
for(i=0;i cin>>p1[i]>>p2[i]; for(i=0;i for(j=i+1;j if(p1[i]>p1[j]){ int t=p1[i];p1[i]=p1[j];p1[j]=t; int q=p2[i];p2[i]=p2[j];p2[j]=q; } ans=0; max=0; for(i=0;;i++){ if(max+p2[i] ans+=p1[i]*p2[i]; max+=p2[i]; }else{ ans+=p1[i]*(n-max); break; //不用最后一个买完!!!! } } cout< }