小明传奇1
Time Limit: 2000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
小明有一家自己的商店,主营牛奶饮品,最近资金紧张,他想以尽可能低的价格进购足够的牛奶以供日常的需要。但是小明年纪大了,脑子不好使了,想要求助你帮他想出一个最好的节省资金办法。
小明可以从几个农场里购买牛奶,每个农场都有自己的价格,一头奶牛的生产量是固定的,所以每个农场的每天的供应量是有限的。小明只可以购买整数量的牛奶从每个农场里,小于或者等于农场的最大供应量。
给你小明的每天所需要的牛奶,以及每个农场对于牛奶的单价和每个农场的最大供应量,请你计算一下小明可以花费的最小钱数以满足每天的需求。
Note: 确保有一个方案可以满足小明的需求。
输入
多组输入,读入到文件末。
每组的第一行
两个整数N and M.
第一个数, N, (0 <= N <= 2,000,000) 小明每天的牛奶需求量. 第二个数, M, (0 <= M <= 5,000) 小明可以购买的农场数.
每组的第二行到m+1行:
每行 Pi and Ai.
Pi (0 <= Pi <= 1,000)农场I的牛奶单价.
Ai (0 <= Ai <= 2,000,000)农场i的最大供应量.
输出
输出可以满足小明的需求的最低的价格
示例输入
100 5 5 20 9 40 3 10 8 80 6 30
示例输出
630
提示
水题,代码如下:
#include <stdio.h>
struct node
{
int prise;
int put;
};
int main()
{
struct node Milk[5000+1],temp;
int get,kind,sum;
int i,j;
while(scanf("%d %d",&get,&kind)!=EOF)
{
for(i=0;i<kind;i++)
scanf("%d %d",&Milk[i].prise,&Milk[i].put);
for(i=0;i<kind-1;i++)
for(j=0;j<kind-1-i;j++)
if(Milk[j].prise>Milk[j+1].prise)
{
temp=Milk[j];
Milk[j]=Milk[j+1];
Milk[j+1]=temp;
}
for(i=sum=0;get>0;i++)
if(Milk[i].put>get)
{
sum+=Milk[i].prise*get;
Milk[i].put-=get;
get=0;
}
else
{
sum+=Milk[i].prise*Milk[i].put;
get-=Milk[i].put;
}
printf("%d\n",sum);
}
return 0;
}