1. 程式人生 > >牛奶包裝Mixing Milk

牛奶包裝Mixing Milk

題目描述

牛奶包裝是一個如此低利潤的生意,所以儘可能低的控制初級產品(牛奶)的價格變的十分重要。 請幫助快樂的牛奶製造者(Merry Milk Makers)以可能的最廉價的方式取得他們所需的牛奶。 快樂的牛奶製造公司從一些農民那購買牛奶,每個農民賣給牛奶製造公司的價格不一定相同。 而且,如一隻母牛一天只能生產一定量的牛奶,農民每一天只有一定量的牛奶可以賣。 每天,快樂的牛奶製造者從每個農民那購買一定量的牛奶,少於或等於農民所能提供的最大值。 給出快樂牛奶製造者的每日的牛奶需求,連同每個農民的可提供的牛奶量和每加侖的價格,請計算快樂的牛奶製造者所要付出錢的最小值。 注意: 每天農民生產的牛奶的總數對快樂的牛奶製造者來說足夠的。

輸入

第 1 行:二個整數, N 和 M。 第一個數值,N,(0<= N<=2,000,000)是快樂的牛奶製造者的一天需要牛奶的數量。 第二個數值,M,(0<= M<=5,000)是他們可能從農民那買到的數目。 第 2 到 M+1 行:每行二個整數,Pi 和 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<iostream>
#include<map>
using namespace std;
int main()
{
	int n,m,s=0,i,x,y,s1=0,f=0,t=0;
	multimap<int,int> map1;
	multimap<int,int>::iterator it;
	scanf("%d%d",&n,&m);
	if(0<=n&&n<=2000000||0<=m&&m<=5000)
		f=1;
	for(i=0;i<m;i++)
	{
		cin>>x>>y;
		if(0<=x && x<=1000 || 0<=y && y<=2000000)
			t=1;
		map1.insert(pair<int,int>(x,y));
	}
	if(f==0||t==0)
		printf("0\n");
	else
	{
	for(it=map1.begin();it!=map1.end();it++)
	{
		s1+=(*it).second;
		s+=((*it).first)*((*it).second);
	    if(s1>=n)
		  break;
	}
	s1=s1-n;
	s=s-((*it).first)*s1;
	if(0<=s&&s<=2000000||0<=s&&s<=5000)
	printf("%d\n",s);
	else
		printf("%d\n",0);
	}
}


#include<stdio.h>
int main(){
	int n,m,a[5002][2],i,s1=0,j,p,t,s2=0,t1;
	scanf("%d%d",&n,&m);
	for(i=0;i<m;i++){
		scanf("%d%d",&a[i][0],&a[i][1]);
	}
	for(i=0;i<m-1;i++){
		for(j=i+1;j<m;j++)
			if(a[i][0]>a[j][0]){
			    t=a[j][0];t1=a[j][1];    
		    	a[j][0]=a[i][0]; a[j][1]=a[i][1];  
		    	a[i][0]=t;  a[i][1]=t1;
			}

	}
	for(i=0;i<m;i++){
		printf("%d %d\n",a[i][0],a[i][1]);
	}
	for(i=0;i<m;i++){
		s1+=a[i][1];s2+=a[i][0]*a[i][1];
		if(s1>=n){
			break;
		}
	}
	printf("%d %d %d\n",s2,a[i][0],s1);
	printf("%d\n",s2-(a[i][0]*(s1-n)));
}